使用此表:
| CUST | PRODUCT | QTY | SMALLEST |
-----------------------------------
| E | 1600 | 2 | 1 |
| F | 1600 | 6 | 9 |
| G | 1600 | 1 | 8 |
我想转动它使它看起来像这样:
| E | F | G |
------------------------------
| 1600 | 1600 | 1600 |
| 2 | 6 | 1 |
| 1 | 9 | 8 |
我知道如何用一个独特的行来做到这一点。如果我只有 QTY 或只有 SMALLEST 它可以很好地处理这个查询,例如:
询问
SELECT E, F, G
FROM (
SELECT CUST, PRODUCT, QTY
FROM Product) up
PIVOT (SUM(QTY) FOR CUST IN (E,F,G)) AS pvt
输出
| E | F | G |
-------------
| 2 | 6 | 1 |
但是,如果我在另一个查询中将另一列添加到混合物中,我会得到这个混乱:
询问
SELECT E, F, G
FROM (
SELECT CUST, PRODUCT, QTY, SMALLEST
FROM Product) up
PIVOT (SUM(QTY) FOR CUST IN (E,F,G)) AS pvt
输出
| E | F | G |
----------------------------
| 2 | (null) | (null) |
| (null) | (null) | 1 |
| (null) | 6 | (null) |
当我更改查询时,很容易看出为什么:
询问
SELECT product,smallest, E, F, G
FROM (
SELECT CUST, PRODUCT, QTY, SMALLEST
FROM Product) up
PIVOT (SUM(QTY) FOR CUST IN (E,F,G)) AS pvt
输出
| PRODUCT | SMALLEST | E | F | G |
-------------------------------------------------
| 1600 | 1 | 2 | (null) | (null) |
| 1600 | 8 | (null) | (null) | 1 |
| 1600 | 9 | (null) | 6 | (null) |
模式变得明显。它发现有 1600 和 1 的地方有一个 E 值:2,有 1600 和 8 的地方有一个 F 值 6,依此类推。
我得到了问题,但我不知道如何解决它。有人可以帮助我完成徒劳的任务吗?