在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
答案 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
,因为这是保留字。