我正在处理查询,并希望得到一些帮助。 我将提供查询的简化版本,希望它能传达我正在尝试做的事情。
鉴于以下表格:
TableA
(RecordNumber,TableAID,SomeValue)TableB
(RecordNumber,X,Y,Z)TableC
(RecordNumber,D,E,F,G)我正在寻找的结果集:
TableB.RecordNumber, X, Y, Z, D, E, F, G, SomeValue1, SomeValue2, SomeValue3, SomeValue4
我的查询目前是
Select
TableB.RecordNumber, X, Y, Z, D, E, F, G, SomeValue1)
inner join
TableC on TableB.RecordNumber = TableC.RecordNumber
inner join
TableA on TableB.RecordNumber = TableA.RecordNumber
我意识到这在TableA中每个SomeValue返回1行。
我想要做的是将RecordNumber
的每一行合并为1行,用{X}行填充SomeValueX
的{{1}}值作为该记录号。
思想?
答案 0 :(得分:0)
如果不使用动态SQL,则不能拥有可变数量的列,但可以在单个列中包含可变数量的逗号分隔值。
SELECT b.RecordNumber, X, Y, Z, D, E, F, G,
STUFF((
SELECT ',' + SomeValue
FROM TableA a
WHERE a.RecordNumber = b.RecordNumber
ORDER BY SomeValue
FOR XML PATH('')
), 1, 1, '') AS SomeValues
FROM TableB b
INNER JOIN TableC c
ON b.RecordNumber = c.RecordNumber
如果TableA.SomeValue
不是字符或字符串数据类型,您还需要将其强制转换为适当长度的varchar。