2013-05-06 89 views
2

随着下面的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 

回答

7

如果数据类型是不同的,那么你需要扮演他们是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列相同的数据类型,你unpivot的数据到同一列前一个子查询。

+0

谢谢!完美的作品 – user2213892 2013-05-06 19:59:46