我正在尝试将 Excel 数据透视表转换为 SQL 查询,因此我不想先从 SQL Server 数据库中提取数据,然后在 Excel 中手动创建数据透视表,而是直接在 SQL 中创建数据透视表查询。
这是我的 data 的示例和 pivot table
我不知道如何完成我的 SQL 查询,我的开始是:
SELECT [Brand],[Location],[Qty],[Price] FROM ShipmentsTable
PIVOT
(
SUM(Qty),SUM([Price])
FOR [MFG Location] IN ... --not sure what to add here
)
有什么建议吗,我应该如何更新我的查询?
最佳答案
您可以尝试使用CASE WHEN
和SUM
函数来实现。
SELECT Brand,
SUM(CASE WHEN Location = 'Austria' THEN qty END) 'Austria_qty',
SUM(CASE WHEN Location = 'Austria' THEN Price END) 'Austria_totle',
SUM(CASE WHEN Location = 'France' THEN qty END) 'France_qty',
SUM(CASE WHEN Location = 'France' THEN Price END)'France_totle',
SUM(CASE WHEN Location = 'Germany' THEN qty END) 'Germany_qty',
SUM(CASE WHEN Location = 'Germany' THEN Price END)'Germany_totle',
SUM(CASE WHEN Location = 'Italy' THEN qty END) 'Italy_qty',
SUM(CASE WHEN Location = 'Italy' THEN Price END) 'Italy_totle'
FROM T
GROUP BY Brand
sqlfiddle:http://sqlfiddle.com/#!18/90e75/17
结果:
| Brand | Austria_qty | Austria_totle | France_qty | France_totle | Germany_qty | Germany_totle | Italy_qty | Italy_totle |
|---------|-------------|--------------------|------------|--------------|-------------|---------------|-----------|-------------|
| Apple | 1 | 1351.16 | 1 | 9.96 | 2 | 1583.85 | 1 | 1053.83 |
| Huawei | 1 | 744.67 | (null) | (null) | 2 | 207704.86 | (null) | (null) |
| Lenovo | 2 | 1184.21 | 2 | 1420.43 | 2 | 3454.91 | (null) | (null) |
| Nokia | (null) | (null) | 1 | 796.03 | (null) | (null) | 1 | 538.41 |
| Samsung | (null) | (null) | 1 | 3327.14 | (null) | (null) | 1 | 9.09 |
编辑
我看到了你的提交,如果你想获得Total
,你可以尝试使用与ROLLUP
SELECT COALESCE(Brand, 'Total') Brand,
SUM(CASE WHEN Location = 'Austria' THEN qty END) 'Austria_qty',
SUM(CASE WHEN Location = 'Austria' THEN Price END) 'Austria_totle',
SUM(CASE WHEN Location = 'France' THEN qty END) 'France_qty',
SUM(CASE WHEN Location = 'France' THEN Price END)'France_totle',
SUM(CASE WHEN Location = 'Germany' THEN qty END) 'Germany_qty',
SUM(CASE WHEN Location = 'Germany' THEN Price END)'Germany_totle',
SUM(CASE WHEN Location = 'Italy' THEN qty END) 'Italy_qty',
SUM(CASE WHEN Location = 'Italy' THEN Price END) 'Italy_totle'
FROM T
GROUP BY Brand with ROLLUP
结果
| Brand | Austria_qty | Austria_totle | France_qty | France_totle | Germany_qty | Germany_totle | Italy_qty | Italy_totle |
|---------|-------------|--------------------|------------|--------------------|-------------|---------------|-----------|--------------------|
| Apple | 1 | 1351.16 | 1 | 9.96 | 2 | 1583.85 | 1 | 1053.83 |
| Huawei | 1 | 744.67 | (null) | (null) | 2 | 207704.86 | (null) | (null) |
| Lenovo | 2 | 1184.2099999999998 | 2 | 1420.43 | 2 | 3454.91 | (null) | (null) |
| Nokia | (null) | (null) | 1 | 796.03 | (null) | (null) | 1 | 538.41 |
| Samsung | (null) | (null) | 1 | 3327.14 | (null) | (null) | 1 | 9.09 |
| Totle | 4 | 3280.04 | 5 | 5553.5599999999995 | 6 | 212743.62 | 3 | 1601.3299999999997 |
关于sql - 像 Excel 数据透视表一样在 SQL Server 中创建数据透视查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51089770/