Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将sql结果项旋转到列中(透视)_Sql_Database_Pivot - Fatal编程技术网

如何将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;