我觉得我错过了这个问题的简单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
有一种简单的单一查询方式可以做到这一点,还是我必须使用(颤抖)游标来做这个伎俩?
答案 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查询进行调整。