将多行连接到1行不同的列SQL Server

时间:2014-07-14 18:04:18

标签: sql sql-server

我正在处理查询,并希望得到一些帮助。 我将提供查询的简化版本,希望它能传达我正在尝试做的事情。

鉴于以下表格:

  • 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}}值作为该记录号。

思想?

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。