zoukankan      html  css  js  c++  java
  • SQL合并多行查询到一行

    示例表 tb 数据如下

    id value
    —————
    1 aa
    1 bb
    2 aaa
    2 bbb
    2 ccc

    第一种

    SELECT id,    
           [val]=( SELECT [value] +','    
                   FROM tb AS b    
                   WHERE b.id = a.id    
                   FOR XML PATH('')  )    
    FROM tb AS a    

    第一种显示结果 

    1 aa,bb, 
    1 aa,bb, 
    2 aaa,bbb,ccc, 
    2 aaa,bbb,ccc, 
    2 aaa,bbb,ccc,

    第二种

    SELECT id,    
           [val]=( SELECT [value] +','    
                   FROM tb AS b    
                   WHERE b.id = a.id    
                   FOR XML PATH('')  )    
    FROM tb AS a     
    GROUP BY id    


    第二种显示

    1 aa,bb, 
    2 aaa,bbb,ccc,

    第三种 (用STUFF函数替换掉首端的逗号)

    SELECT id,    
    [val]=STUFF( (SELECT ','+[value]
    FROM tb AS b
    WHERE b.id = a.id
    FOR XML PATH('')) , 1 , 1 , '' )
    FROM tb AS a
    GROUP BY id

    第三种显示结果 
    1 aa,bb 
    2 aaa,bbb,ccc

    STUFF 函数将字符串插入另一字符串。它在第一个字符串中从开始位置删除指定长度的字符;然后将第二个字符串插入第一个字符串的开始位置。
    STUFF ( character_expression , start , length ,character_expression_insert )

    第四种 (用REPLACE函数将所有空格替换成逗号)

    SELECT id,    
    [val]= REPLACE( (SELECT [value] AS [data()]
    FROM tb AS b
    WHERE b.id = a.id
    FOR XML PATH('')) , ' ', ',')
    FROM tb AS a
    GROUP BY id

    结果与第三种一样。

  • 相关阅读:
    把Discuz!NT放在虚拟目录下
    表格样式
    页面CSS的问题,不懂中
    临时存储信息
    asp.net2.0事务
    repeater控件分成两列显示
    P2P的NAT研究
    javascript字符串trim的实现
    新浪微博OAUTH2验证
    新浪微博接口在safri下的bug
  • 原文地址:https://www.cnblogs.com/eric-qin/p/4549616.html
Copyright © 2011-2022 走看看