簡體   English   中英

將具有相同ID的多行合並為一列

[英]Combine Multiple Rows with same ID into one column

在SQL Server中,我有一個查詢來拉取類似的值:

SELECT ID, NAME, TITLE
FROM TABLE_X

要獲得如下結果:

ID  NAME  TITLE
----------------
01  Bob   Cat
02  Bob   Bat
03  Tom   Mat

我想運行查詢以獲取以下結果:

NAME  COUNT  TITLE
-----------------------
Bob   2      Cat, Bat
Tom   1      Mat

我所擁有的是這樣的:

SELECT NAME, COUNT(ID), STUFF(TITLE)
FROM TABLE_X

STUFF語法將如下面的代碼所示,以獲取所需的結果-

SELECT B.NAME, COUNT(*) [COUNT],
STUFF((
    SELECT  ',' + A.TITLE 
    FROM TABLE_X A 
    WHERE A.NAME = B.NAME  
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') TITLE
FROM TABLE_X B
GROUP BY  B.NAME

輸出是-

NAME    COUNT   TITLE
Bob     2       Cat,Bat
Tom     1       Mat

您可以按NAME分組並使用STRING_AGG聚合函數(從SQL Server 2017開始)

SELECT NAME, COUNT(*) AS [COUNT], STRING_AGG(TABLE_X.TITLE, ', ') AS TITLE
FROM TABLE_X
GROUP BY NAME
ORDER BY NAME

請注意,只有GROUP BY子句中列出的列可以按原樣顯示在SELECT列表中。 您必須將聚合函數應用於所有其他函數。 我逃脫了列別名COUNT ,因為這是一個保留字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM