SQL Server:将两行合并为一行

时间:2015-02-28 00:14:31

标签: sql sql-server

我想编写一个显示以下结果的查询

  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

3 个答案:

答案 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)),并使用外部查询加入IdContract#子查询,以获取Market的值为逗号分隔每个IdContract#的值

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#