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

在SqlServer中,如何将多行中的单个列连接到具有多个列的单个行中,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,在SqlServer 2008中,我有一个如下表: +--------+--------------------+--------------+ some_key | some_discriminator | some_column -------- | ------------------ | ------------- K1 | D1 | V1 K1 | D2 | V2 K2 | D1

在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

简单的pivot查询可能适合您的需要:

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
单个
VARCHAR
返回该字符串


但是,如果您希望在数据透视结果中显示许多列或动态列,则这可能不合适。

您可以在本文中找到部分答案=>感谢您的回复。我应该提到列类型。some_列包含varchars。我收到一个错误,因为SUM运算符不需要varchar。@KevinStembridge抱歉,我应该使用
MAX
而不是
SUM