SQL Server2005中按列连接字符串三种方法 (1)

  • 来源: 赛迪网 作者: nokiaguy   2009-08-02/09:08
  • 最近做一个项目,遇到一个在分组的情况下,将某一列的字段值(varchar类型)连接起来的问题,类似于sum函数对int型字段值求和。如有一个表t_table,结构和数据如图1

    图1

    其中要按着xh字段分组,并且将每一组name字段值连接起来。最终结果希望如图2所示

    图2

    表中的th字段值对于每一个xh值是唯一的,也是有限的,也就是说,对于一个xh值,th的值不会太多,如最多是10个(从1至10)。

    以上需求最终想了三种方法来解决这个问题。

    一、修改表结构

    如果是新的项目,可以考虑修改一下表的结构。如果t_table的结构修改如下:

    xh     value1 value2   value3    value4     .... ....                 value10
       0001 123456 654321 456789  
       0002 12abcd 4d2r343 343dfd 
       0003 abcde3 132323

    这种方法将value的值纵向改为横向,也就是说,按每一个xh值,将value字段的值按逆时针旋转了90度。 但这种方法要有一个前提,就是假设xh的每一个值所对应的value值不会太多,如上面不超过10个,这样才有可能建立有限个字段。如果按着上面的字段结构,只需要将这些字段加一起就可以了,也不用分组。如下所示:

    select xh , (value1 + value2 + value3 +  + value10) as value from t_table

    但这种方法至少有如下三个缺陷:

    1. 需要修改表结构,这对于已经进行很长时间或是已经上线的项目产不适用

    2. 对每一个xh字段的value取值数有限制,如果太多,就得建立很多字段。这样性能会降低。

    3. 这样做虽然查询容易,但如果需要对每一个xh的不同值频繁修改或加入新的值时,如果把它们都放到一行,容易因为行锁而降低性能。


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多