Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不兼容的透视类型SQL_Sql_Text_Pivot - Fatal编程技术网

不兼容的透视类型SQL

不兼容的透视类型SQL,sql,text,pivot,Sql,Text,Pivot,我得到了一个数据库,需要对其执行透视。我的枢轴运转得很好。但是,我需要在SELECT中执行的列之一是text类型的列。但是,PIVOT命令不能使用此数据类型。我该如何解决这个问题呢?我个人的偏好是将列类型转换为VARCHAR(MAX),然后完成它,TEXT无论如何都在弃用列表中 如果这不是一个选项,您可以在查询中简单地将文本值转换为VARCHAR(MAX)。e、 g CREATE TABLE #T (A TEXT, B CHAR(1), Val INT); INSERT #T (A, B, Va

我得到了一个数据库,需要对其执行透视。我的枢轴运转得很好。但是,我需要在SELECT中执行的列之一是text类型的列。但是,PIVOT命令不能使用此数据类型。我该如何解决这个问题呢?

我个人的偏好是将列类型转换为
VARCHAR(MAX)
,然后完成它,
TEXT
无论如何都在弃用列表中

如果这不是一个选项,您可以在查询中简单地将文本值转换为
VARCHAR(MAX)
。e、 g

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;
给出了错误:

Msg 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;

这个答案有用吗:
PIVOT
聚合它显示的数据,在
文本上禁止聚合。显示您的代码,并解释为什么数据透视表中需要有
text
列。一种解决方法是将
文本
强制转换为
varchar
,但它显然有其性能损失。