2012-04-24 62 views
2

我的表是这样的:显示SQL表等方式

Code label Zone Price 
---- ----- ---- ----- 
049  able  A  5 
100  hui  A  6 
049  ddf  B  10 
100  dsqf  B  34 

我怎样才能改变这样的:

Code  A   B 
----  ---  ---- 
049  5   10 
100  6   34 
+2

您要查找的词是“支点”,并有大量的问题和答案解决这一被发现 - 无论是使用标准的SQL或使用特定数据库系统的专有特性 - 其中我们知道不是你正在使用的。 – 2012-04-24 14:30:16

+0

@Damien_The_Unbeliever - OP有7个关于SQL Server 2008的问题,所以这是一个提示。顺便说一句,我测试了我的答案在Oracle的小提琴,它没有奏效。将in子句更改为“A”作为A,将“B”更改为B来使其工作。你知道这是什么标准吗? – 2012-04-24 15:09:57

+1

@MikaelEriksson - 我只看了他们最近的5个问题,没有一个被特别标记为SQL Server。 'CASE'和'GROUP BY'通常可以实现数据透视,并将'CASE'包装在您选择的聚合中。这应该适用于任何标准产品。 – 2012-04-24 16:37:03

回答

3
select Code, A, B 
from 
    (
    select Code, Zone, Price 
    from YourTable 
) T 
pivot 
    (
    min(Price) for Zone in (A, B) 
) P 
0

对不起,我还没有测试这一点,但你应该能够做到成才是这样的:

SELECT CODE, 
SUM(CASE ZONE WHEN A THEN PRICE ELSE NULL END) AS A, 
SUM(CASE ZONE WHEN B THEN PRICE ELSE NULL END) AS B 
GROUP BY CODE 
+0

谢谢你,但我得到了消息102,Niveau 15,1,Ligne 8 语法与'','。 Msg 156,Niveau 15,État1,Ligne 10 语法不适用于所有语言。 – user609511 2012-04-24 18:04:42

1

像这样的东西应该工作(假设表名为 'T')

select codeA, A, B from 
    (select code as codeA, price as A from t where zone='A'), 
    (select code as codeB, price as B from t where zone='B') 
    where codeA=codeB 
+0

谢谢你,但结果不是1 ligne – user609511 2012-04-24 18:05:18

+0

我不知道你想如何结合多个A或B的价格。您可能希望'min(价格)作为A','总和(价格)作为A' - 在我看来,每个代码和区域可能只有一个价格。如果不是这样,请添加摘要。 – 2012-04-24 18:07:42

+0

你的例子是工作,但是当我添加C区,这意味着我必须比较哪里CodeA = CodeB和CodeA = CodeC – user609511 2012-04-24 19:13:54