我个人的偏好是将列类型转换为VARCHAR(MAX)
并完成它,TEXT
无论如何都在弃用列表中。
如果这不是一个选项,您可以简单地将文本值转换/转换为VARCHAR(MAX)
在你的查询中。例如
CREATE TABLE #T (A TEXT, B CHAR(1), Val INT);
INSERT #T (A, B, Val)
VALUES ('A', '1', 1), ('A', '2', 3), ('A', '3', 2);
SELECT pvt.A, pvt.[1], pvt.[2], pvt.[3]
FROM #T
PIVOT
( SUM(Val)
FOR B IN ([1], [2], [3])
) pvt;
给出错误:
消息 488,第 16 级,状态 1,第 6 行
透视分组列必须具有可比性。 “A”列的类型是“文本”,不可比较。
这工作正常:
SELECT pvt.A, pvt.[1], pvt.[2], pvt.[3]
FROM ( SELECT A = CAST(A AS VARCHAR(MAX)), B, Val
FROM #T
) t
PIVOT
( SUM(Val)
FOR B IN ([1], [2], [3])
) pvt;