2016-09-08 48 views
1

2008年SQLSERVER,我有一个表是这样的:在SQLSERVER,如何加入多行一列成单行多列

+--------+--------------------+--------------+ 
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 
+0

你可以在这篇文章中找到部分答案=> http://stackoverflow.com/questions/39390972/sql-server-pivot-only-on-a-part-of-the-result/39392731#39392731 –

回答

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

但是,如果您想要在旋转结果中显示多列或动态列,这可能不合适。

+0

感谢您的回应蒂姆。我应该提到列类型。 some_column包含varchars。我收到一个错误,因为SUM运算符不期待varchar。 –

+0

@KevinStembridge对不起,我应该使用'MAX'而不是'SUM'。 –

+0

太棒了。非常感谢你。 –