2013-05-06 1 views
2

С sql ниже я получаю ошибку, когда мои типы данных не равны. C1 является varchar, а C2 - числом. Я обнаружил, что сводные таблицы должны иметь один и тот же тип данных, но как бы преобразовать число в varachar при использовании операторов case, например ниже?таблица с открытыми списками различных типов данных с футлярами

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; 

Разница в том, теперь у вас есть подзапрос, который используется для выбора и закиньте c1 и c2 колонны к тому же типу данных, прежде чем UNPIVOT данные в том же столбце.

+0

СПАСИБО! отлично работает – user2213892

Смежные вопросы