2013-05-06 93 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