Sql Server:多行合並成一行,並做分組統計


--創建 test 表 ,插入數據
 
CREATE TABLE test(code varchar( 50), [values] varchar( 10),[count]  int)
INSERT test SELECT  ' 001 '' aa ', 1
UNION ALL SELECT  ' 001 '' bb ', 2
UNION ALL SELECT  ' 002 '' aaa ', 4
UNION ALL SELECT  ' 002 '' bbb ', 5
UNION ALL SELECT  ' 002 '' ccc ', 3;
 
 
 
--方法一
--將多行合並成一行,並做分組統計
SELECT code,
       [values] =
       stuff(b.[values].value( ' /R[1] '' nvarchar(max) '),
              1,
              1,
              ''),[count]
  FROM (SELECT  code,sum([count])  as [count]
          FROM test
         GROUP BY code) a
 CROSS apply (
        SELECT [values] =(
            SELECT N ' , ' + [values] FROM test
              WHERE code = a.code
                         FOR XML PATH( ''), ROOT( ' R '), TYPE
        )
) b;
 
 
 
--方法二
 
---SQL2005中的新解法   使用XML
 
SELECT code, data=STUFF((SELECT  ' , '+[values] FROM test t WHERE code=t1.code FOR XML PATH( '')),  11''),sum([count])  as [count]
FROM test t1
GROUP BY code
 
 
 
--查詢結果
 
-- 001    aa,bb     3
-- 002    aaa,bbb,ccc     12
 
 
 
drop table test
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM