如何将2列旋转到一行

时间:2014-04-16 21:08:22

标签: sql sql-server pivot

我正在尝试为具有特定产品的单位和基本单位旋转表格。我试图让我的最终结果只有一行。

 Product   Unit     BaseUnit
 Gas       MMcf       Mcf
 Oil       Mbbl       bbl
 Water     Mgal       gal

我的输出表应如下所示:

GasUnit  GasBaseUnit OilUnit OilBaseUnit WaterUnit WaterBaseUnit
 MMcf       Mcf       Mbbl       bbl       Mgal        gal

之前我已经完成了一个数据透视表,但从来没有必要同时转动2列并将它们移动到一行。

这是我到目前为止所拥有的。我可以使用2个聚合吗?我不知道如何处理这个问题。

SELECT *
from
(
    select Product, Unit, BaseUnit
    from t
) x
pivot
(
    sum(BaseUnit)
    for Product in ([Gas], [Oil], [Water])
) p

1 个答案:

答案 0 :(得分:1)

使用静态数据,这将获得输出表

WITH prep AS (
  SELECT Product + ' Unit' TYPE, Unit Value
  FROM   utilities
  UNION ALL
  SELECT Product + ' BaseUnit' TYPE, BaseUnit Value
  FROM   utilities
)
SELECT [Gas Unit], [Gas BaseUnit]
     , [Oil Unit], [Oil BaseUnit]
     , [Water Unit], [Water BaseUnit]
FROM   (SELECT TYPE, Value
        FROM   prep
       ) a
       PIVOT
       (MAX(Value)
        FOR TYPE IN ([Gas Unit], [Gas BaseUnit]
                   , [Oil Unit], [Oil BaseUnit]
                   , [Water Unit], [Water BaseUnit])
       ) pvt

演示:SQLFiddle

使用动态数据,您需要使用动态查询来创建PIVOT列列表