我想编写一个显示以下结果的查询
这
ID Contract# Market
1 123kjs 40010
1 123kjs 40011
2 121kjs 40098
2 121kjs 40099
要
ID Contract# Market
1 123kjs 40010,40011
2 121kjs 40098,40099
答案 0 :(得分:0)
尝试此查询,我使用GROUP_CONCAT将列字段转换为1行字段。
另请注意,您应使用表格名称重命名FROM clause
。
SELECT ID,Contract#, GROUP_CONCAT(Market SEPARATOR ',')
FROM nameOfThatTable GROUP BY ID;
答案 1 :(得分:0)
试一试。我使用PIVOT
来解决它。
SELECT
ID,
Contract#,
ISNULL(CONVERT(varchar,[40010]) + ',' + CONVERT(varchar,[40011]),
CONVERT(varchar,[40098]) + ',' + CONVERT(varchar,[40099])) AS Market FROM
( SELECT * FROM ContractTable) AS A
PIVOT(MIN(Market) FOR Market IN ([40010],[40011],[40098],[40099])) AS PVT
ORDER BY ID
答案 2 :(得分:0)
您可以在子查询中使用', ' + CAST(Market AS VARCHAR(30))
,并使用外部查询加入Id
和Contract#
子查询,以获取Market
的值为逗号分隔每个Id
和Contract#
的值。
SELECT DISTINCT ID,Contract#,
SUBSTRING(
(SELECT ', ' + CAST(Market AS VARCHAR(30))
FROM #TEMP T1
WHERE T2.Id=T1.Id AND T2.Contract#=T1.Contract#
FOR XML PATH('')),2,200000) Market
FROM #TEMP T2
注意
......... 强>
如果您只想获得Id
的 CSV 值,请从子查询中删除T2.Contract#=T1.Contract#
。