3

以下の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
4

1 に答える 1

9

データ型が異なる場合は、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;

c1違いは、データを同じ列にアンピボットする前に、c2列を選択して同じデータ型にキャストするために使用されるサブクエリがあることです。

于 2013-05-06T19:22:27.153 に答える