【发布时间】:2018-12-11 16:34:24
【问题描述】:
我有如下表结构
Create Table PivotTabSample (
ID INT IDENTITY(100000001,1) NOT NULL,
Product Nvarchar(30),
StoreNumber INT,
StoreSalesEstimate DECIMAL,
StoreSalesActual DECIMAL
)
示例值使用以下插入填充 -
INSERT INTO [dbo].[PivotTabSample]
([Product],[StoreNumber],[StoreSalesEstimate],[StoreSalesActual])
VALUES ('P0001','101',500,450)
INSERT INTO [dbo].[PivotTabSample]
([Product],[StoreNumber],[StoreSalesEstimate],[StoreSalesActual])
VALUES ('P0002','101',300,350)
INSERT INTO [dbo].[PivotTabSample]
([Product],[StoreNumber],[StoreSalesEstimate],[StoreSalesActual])
VALUES ('P0003','101',50,61)
INSERT INTO [dbo].[PivotTabSample]
([Product],[StoreNumber],[StoreSalesEstimate],[StoreSalesActual])
VALUES ('P0004','101',100,900)
INSERT INTO [dbo].[PivotTabSample]
([Product],[StoreNumber],[StoreSalesEstimate],[StoreSalesActual])
VALUES ('P0005','101',10,9)
INSERT INTO [dbo].[PivotTabSample]
([Product],[StoreNumber],[StoreSalesEstimate],[StoreSalesActual])
VALUES ('P0001','102',1500,1450)
INSERT INTO [dbo].[PivotTabSample]
([Product],[StoreNumber],[StoreSalesEstimate],[StoreSalesActual])
VALUES ('P0002','102',1400,3500)
INSERT INTO [dbo].[PivotTabSample]
([Product],[StoreNumber],[StoreSalesEstimate],[StoreSalesActual])
VALUES ('P0003','102',150,610)
INSERT INTO [dbo].[PivotTabSample]
([Product],[StoreNumber],[StoreSalesEstimate],[StoreSalesActual])
VALUES ('P0004','102',800,900)
我正在尝试对此数据集进行 PIVOT。我运行以下查询 -
SELECT Product, [101], [102]
FROM PivotTabSample
PIVOT
( min(StoreSalesActual)
FOR StoreNumber IN ([101],[102])
)AS p
得到的结果是不想要的方式 - 我没有得到产品和商店的详细信息。每个商店有两个产品行。 我不要那个。这里不需要聚合,但我不知道如何实现。
我想要这样的结果 -
Product 101ActualSales 101EstimatedSales 102ActualSales 102estimatedSales
P001 100 101 90 91
P002
P003
P001
请指教。
【问题讨论】:
-
是的。
PIVOT令人困惑。表中的额外列会导致结果集中出现意外行。这就是为什么几乎所有示例在FROM子句中都有一个子查询,将列限制为查询中实际使用的列。 -
您想要的结果与输入数据的格式/结构相同,只是列名不同...
-
非常抱歉。这是对预期结果的错误表述。我已经更新了预期结果
-
您使用的是哪个 dbms? (SQL Server?)
-
SQL 服务器 2014