sql-server - MS-SQL 透视两列

标签 sql-server pivot

我在 MS-SQL 数据库中得到以下数据

Manufacturer|Model|Location|Inventory|Sold
------------|-----|--------|---------|-----
Alpha       |One  |USA     |3000     |123
Alpha       |One  |UK      |2300     |53
Beta        |Two  |USA     |1300     |45
Beta        |Two  |UK      |620      |12
Gamma       |Three|USA     |520      |155
Gamma       |Three|UK      |250      |19

我想获得
Manufacturer|Model|Inventory UK|Sold UK|Inventory USA|Sold USA
------------|-----|------------|-------|-------------|--------
Alpha       |One  |2300        |53     |3000         |123
Beta        |Two  |620         |12     |1300         |45
Gamma       |Three|250         |19     |520          |155

如果我理解正确,我应该旋转两次,但目前我被困在如何获得这个
SELECT *
FROM Data
PIVOT (max([Inventory]) FOR Location IN ([UK],[USA])) Piv1
PIVOT (max([Sold]) FOR Location IN ([UK],[USA])) Piv2
group by Manufacturer,Model,..?

但当然,我仍然不明白我应该如何进行。
有人可以帮帮我吗?
非常感谢

最佳答案

这是直接使用 SQL Server 的 PIVOT 执行此操作的一种方法运算符(operator):

SELECT
    Manufacturer,
    Model,
    MAX(UK) AS [Inventory UK],
    MAX(UK1) AS [Sold UK],
    MAX(USA) AS [Inventory USA],
    MAX(USA1) AS [Sold USA]
FROM
(
    SELECT Manufacturer, Model, Location, Location + '1' AS Location1, Inventory, Sold
    FROM Data
) AS P
PIVOT (MAX([Inventory]) FOR Location IN ([UK],[USA])) Piv1
PIVOT (MAX([Sold]) FOR Location1 IN ([UK1],[USA1])) Piv2
GROUP BY Manufacturer, Model
ORDER BY Manufacturer;

enter image description here

Demo

关于sql-server - MS-SQL 透视两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52552307/

相关文章:

sql-server - 触发器 - 是否需要 BEGIN/COMMIT TRAN

sql - PostgreSQl:选择多行并使其成为一行

excel - 如何从另一张纸上的数据透视表计算 COUNTIF "=#N/A"?

sql - 我需要在 T-SQL 数据透视查询中更改哪些内容才能实现此特定输出?

sql-server - 为 SQL Server 设置 Maven 依赖项

sql-server - 备份文件在 SQL Server Management Studio 中不可见

sql - 为什么将 nvarchar 变量设置为 null 在此存储过程中不会返回任何内容?

SQL:将个人的不同诊断放入水平行中

mysql - 如何在 MySQL 中返回数据透视表输出?

mysql - 优化 : WHERE x IN (1, 2 .., 100.000) 与 INNER JOIN tmp_table USING(x)?