在SqlServer中,如何将多行中的单个列连接到具有多个列的单个行中
在SqlServer 2008中,我有一个如下表:在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
+--------+--------------------+--------------+
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
。