在SqlServer中,如何将多行中的单个列连接到具有多个列的单个行中

时间:2016-09-08 15:36:40

标签: sql sql-server sql-server-2008-r2

在SqlServer 2008中,我有一个这样的表:

+--------+--------------------+--------------+
some_key | some_discriminator | some_column
-------- | ------------------ | -------------
K1       | D1                 | V1
K1       | D2                 | V2
K2       | D1                 | V3
K2       | D2                 | V4

我希望运行一个产生此问题的查询:

+--------+------+--------
some_key |D1    | D2
---------|---------------
K1       | V1   | V2
K2       | V3   | V4

1 个答案:

答案 0 :(得分:2)

简单的数据透视查询可能符合您的需求:

SELECT some_key,
       MAX(CASE WHEN some_discriminator = 'D1' THEN some_column ELSE NULL END) AS D1,
       MAX(CASE WHEN some_discriminator = 'D2' THEN some_column ELSE NULL END) AS D2
FROM yourTable
GROUP BY some_key

分组有效,因为MAX会忽略NULL个值,而MAX的{​​{1}}会返回该字符串。

但如果您想要在轮回结果中显示许多列或动态列,则可能不适用。