如何将sql结果项旋转到列中(透视)
我有一张桌子如何将sql结果项旋转到列中(透视),sql,database,pivot,Sql,Database,Pivot,我有一张桌子 | id | value | comment | |--------------------------| | 1 | Some1 | comm1 | |--------------------------| | 2 | Some2 | comm2 | |--------------------------| 我有表b,表a是外键 | id | id_a |name | amount | factor | |---------
| id | value | comment |
|--------------------------|
| 1 | Some1 | comm1 |
|--------------------------|
| 2 | Some2 | comm2 |
|--------------------------|
我有表b,表a是外键
| id | id_a |name | amount | factor |
|--------------------------------------------|
| 1 | 1 |Car | 12 | 2 |
|--------------------------------------------|
| 2 | 1 |Bike | 22 | 5 |
|--------------------------------------------|
| 3 | 2 |Car | 54 | 1 |
|--------------------------------------------|
| 4 | 2 |Bike | 55 | 4 |
|--------------------------------------------|
因此,我希望有一个组合:
|id| value | comment | Car_Amount | Car_factor | Bike_Amount | Bike_Factor |
|--------------------------------------------------------------------------|
| 1| Some1 | comm1 | 12 | 2 | 22 | 5 |
|--------------------------------------------------------------------------|
| 2| Some2 | comm2 | 54 | 1 | 55 | 4 |
|--------------------------------------------------------------------------|
在我看来,这不是一个支点。但我不确定这是否是一个好的做法。我不是SQL方面的专家,但这样混用表看起来是完全错误的。
我的意思是“他们”想把它作为一个简单的结果来报告
有可能吗
谢谢你试试这个
SELECT ID,value,comment,
SUM(CASE WHEN Name='Car' THEN Amount END) AS Car_Amount,
SUM(CASE WHEN Name='Car' THEN factor END) AS Car_factor ,
SUM(CASE WHEN Name='Bike' THEN Amount END) AS Bike_Amount,
SUM(CASE WHEN Name='Bike' THEN factor END) AS Bike_factor
FROM TableB
INNER JOIN TableA on TableB.ID= TableA.id
Group by ID,value,comment
如下所示的聚合值:
select
a.id, a.value, a.comment,
sum(case when b.name='Car' then b.amount end) as Car_Amount,
sum(case when b.name='Car' then b.factor end) as Car_Factor,
sum(case when b.name='Bike' then b.amount end) as Bike_Amount,
sum(case when b.name='Bike' then b.factor end) as Bike_Factor
from a left join b on a.id=b.id_a
group by a.id, a.value, a.comment;
创建一个fiddle并发布(sqlfiddle.com),这样我们就可以看到您尝试了什么。如果你想通过阅读找出答案,请查看“表别名”和“连接”表b中是否始终有一个Car和一个Bike条目?或者也许只有一辆车?或者其他数据?请在标签中提供您的dbms…工作正常。谢谢有没有办法动态地包括“汽车”和“自行车”等?如果“name”会有不同的条目。@OtisOttington如果您事先不知道要透视的列,则需要动态SQL。无论如何,您应该知道要聚合哪些列以及如何聚合,sum、min或max。我认为这不太可能。谢谢很好。谢谢
select
a.id, a.value, a.comment,
sum(case when b.name='Car' then b.amount end) as Car_Amount,
sum(case when b.name='Car' then b.factor end) as Car_Factor,
sum(case when b.name='Bike' then b.amount end) as Bike_Amount,
sum(case when b.name='Bike' then b.factor end) as Bike_Factor
from a left join b on a.id=b.id_a
group by a.id, a.value, a.comment;