【发布时间】:2020-11-19 10:41:14
【问题描述】:
我正在尝试转置表,但我收到消息表明列类型与其他列冲突。 这是解决方案
WITH CTE_Unpivoted as
( select ID, Fields, QuantityValue
from Bikes2 as s
UNPIVOT
(QuantityValue for Fields IN(ProductName, Country, Quantity)
)AS u
)
SELECT Fields, [1],[2],[3],[4],[5],[6],[7]
from CTE_Unpivoted AS u
PIVOT
(SUM(QuantityValue) for ID IN ([1],[2],[3],[4],[5],[6],[7])) AS p
这是数据
CREATE TABLE Bikes2
(ID INT PRIMARY KEY IDENTITY,
ProductName VARCHAR(50),
Country VARCHAR(50),
Quantity INT);
INSERT INTO Bikes2 VALUES ('Road Bike', 'USA', 128)
INSERT INTO Bikes2 VALUES ('Road Bike', 'Italy', 64)
INSERT INTO Bikes2 VALUES ('Electric Bike', 'USA', 257)
INSERT INTO Bikes2 VALUES ('Electric Bike', 'Italy', 143)
INSERT INTO Bikes2 VALUES ('Children Bicecle', 'USA', 386)
INSERT INTO Bikes2 VALUES ('Children Bicecle', 'Italy', 52)
INSERT INTO Bikes2 VALUES ('Road Bike', 'USA', 35)
SELECT * FROM Bikes2
如何正确地做到这一点?有没有可能让它动态化? 结果是这样的
【问题讨论】:
-
请向我们展示您想要的样本数据结果。
-
显然,您应该将所有列转换为相同的数据类型。看起来像
varchar,因为它是最通用的,其他列可以转换为它。或者你想如何将数字、日期和字符串存储在同一列中,而 SQL 结果列应该具有单一类型? -
请edit your question 包含此信息。
-
为什么要在 SQL 中这样做?如果您想做像
SUM这样的“简单”事情(这正是您在PIVOT中尝试做的事情),那么将诸如数量之类的事情更改为varchar将会有问题。 -
最后添加结果。当我尝试将 Quantity 转换为 varchar(50) 时,仍然出现错误
标签: sql sql-server pivot unpivot