TSQL:查询结果中的多行为单列

时间:2015-10-20 14:33:26

标签: tsql join

我觉得我错过了这个问题的简单T-SQL答案。我有一个Measurements表和一个与MeasurementID列相关的Activity表,并且至少有3个与单个测量相关的活动(有时更多)。如何构造查询,使输出看起来像这样:

Measurement ID         Activities
      1                 Running:Walking:Eating
      2                 Walking:Eating:Sleeping

如果输出看起来像这样,我也会感到满意:

Measurement ID       Activity1    Activity2     Activity3
      1              Running      Walking       Eating

有一种简单的单一查询方式可以做到这一点,还是我必须使用(颤抖)游标来做这个伎俩?

2 个答案:

答案 0 :(得分:2)

不幸的是,T-SQL中没有GROUP_CONCAT()。但是有一个模拟它的技巧:

SELECT
  MeasurmentID,
  Activities = REPLACE((SELECT Activity AS [data()]
                        FROM MeasurmentActivities
                        WHERE MeasurmentID = ma.MeasurmentID
                        FOR xml path('')), ' ', ':')
FROM
  MeasurmentActivities AS ma
GROUP BY
  MeasurmentID

答案 1 :(得分:0)

如果您事先知道测量的活动数量,可以试试PIVOT运营商。

否则没有简单的方法可以做到。

如果可以的话,我建议你“平衡”应用程序端的行。

如果这不是一个选项,我认为在Transact-SQL中工作的唯一方法是将结果转换为XML输出并使用XPATH查询进行调整。