将具有相同ID的多行合并为一列

时间:2019-06-28 18:17:10

标签: sql sql-server

在SQL Server中,我有一个查询,其查询值如下:

var1=$(awk -v low=$(grep low /proc/zoneinfo | awk '{k+=$2}END{print k}') \ '{a[$1]=$2} END{print a["MemFree:"]+a["Active(file):"]+a["Inactive(file):"]+a["SReclaimable:"]-(12*low);}' /proc/meminfo)

if [var1 -lt 1*1000*1000]; then
         echo "Memory exceeded"
         kill -9 $var2
         break
else

要获得如下结果:

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以按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,因为这是保留字。