显示SQL表等方式
我的表是这样的:显示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
select Code, A, B
from
(
select Code, Zone, Price
from YourTable
) T
pivot
(
min(Price) for Zone in (A, B)
) P
对不起,我还没有测试这一点,但你应该能够做到成才是这样的:
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
谢谢你,但我得到了消息102,Niveau 15,1,Ligne 8 语法与'','。 Msg 156,Niveau 15,État1,Ligne 10 语法不适用于所有语言。 – user609511 2012-04-24 18:04:42
像这样的东西应该工作(假设表名为 '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
谢谢你,但结果不是1 ligne – user609511 2012-04-24 18:05:18
我不知道你想如何结合多个A或B的价格。您可能希望'min(价格)作为A','总和(价格)作为A' - 在我看来,每个代码和区域可能只有一个价格。如果不是这样,请添加摘要。 – 2012-04-24 18:07:42
你的例子是工作,但是当我添加C区,这意味着我必须比较哪里CodeA = CodeB和CodeA = CodeC – user609511 2012-04-24 19:13:54
您要查找的词是“支点”,并有大量的问题和答案解决这一被发现 - 无论是使用标准的SQL或使用特定数据库系统的专有特性 - 其中我们知道不是你正在使用的。 – 2012-04-24 14:30:16
@Damien_The_Unbeliever - OP有7个关于SQL Server 2008的问题,所以这是一个提示。顺便说一句,我测试了我的答案在Oracle的小提琴,它没有奏效。将in子句更改为“A”作为A,将“B”更改为B来使其工作。你知道这是什么标准吗? – 2012-04-24 15:09:57
@MikaelEriksson - 我只看了他们最近的5个问题,没有一个被特别标记为SQL Server。 'CASE'和'GROUP BY'通常可以实现数据透视,并将'CASE'包装在您选择的聚合中。这应该适用于任何标准产品。 – 2012-04-24 16:37:03