sql - 用案例反透视表不同的数据类型

标签 sql plsql unpivot

使用下面的 sql 我得到错误我的数据类型不相等。 C1 是 varchar,C2 是数字。我发现数据透视表必须是相同的数据类型,但是如何在使用下面的 case 语句时将数字转换为 varachar?

SELECT userID,

CASE columnname
WHEN 'c1' THEN
'Column1'
WHEN 'c2' THEN
'Column2'

END AS
columnname,

CASE columnname
WHEN 'c1' THEN
'1'
WHEN 'c2' THEN
'2'
END AS
"Extra info",
columnresult
FROM mytable unpivot( columnresult FOR columnname IN(c1,c2)) u

最佳答案

如果数据类型不同,则需要在 UNPIVOT 之前将它们强制转换为相同类型。代码将与此类似:

SELECT userID,
    CASE columnname
        WHEN 'c1' THEN 'Column1'
        WHEN 'c2' THEN 'Column2'
    END AS columnname,
    CASE columnname
        WHEN 'c1' THEN '1'
        WHEN 'c2' THEN '2'
    END AS "Extra info",
    columnresult
FROM
(
    select userid, c1, cast(c2 as varchar2(10)) c2
    from mytable 
) 
unpivot
(
    columnresult 
    FOR columnname IN(c1,c2)
) u;

不同之处在于您现在有一个子查询,用于选择 c1c2 列并将其转换为相同的数据类型,然后再将数据取消透视到同一列.

关于sql - 用案例反透视表不同的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16405658/

相关文章:

mysql - 两个 SQL 连接,两个不同的结果

sql - ERP 的最佳默认事务隔离级别是多少(如果有)?

Oracle PL/SQL : How to implement pointers to in-memory record types

mysql - 将多列合并为一列,为 mysql 中的每一列创建一行

mysql - 如何计算数据库中的水平值?

sql - 在 Oracle 中使用什么来编写和编辑存储过程?

mysql - 优雅的 mysql 从一个表中选择、分组、组合多行

oracle - 存储过程中的异常

sql - 加密 SQL 中的字符串(可能是 ORACLE PL SQL)。凯撒密码

sql-server-2008 - Sql 服务器 : How do I unpivot with an alias?