Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 почему в самодельном unpivot надо явно указывать тип в case?  [new]
beg_inner
Guest
имеется горизонтальная таблица вида:
select *
into anag   
from (
select 1 as user_id, 'carlo' as name, 'operatore' as corso1, 2000 as anno1, 
                                      'istruttore' as corso2, 2002 as anno2, 
                                       null as corso3, null as anno3 union all
select 2 as user_id, 'f' as name, 'istruttore' as corso1, 2000 as anno1, 
                                      null as corso2, null as anno2, 
                                       null as corso3, null as anno3) t

ее надо развернуть вертикально + создать справочник (нормализовать).
справочник:

select *
into corsi 
from (
select 1 as id, 'corso1' as c_name  union all
select 2, 'corso2' union all 
select 3, 'corso3' 
) t  

теперь сворачиваю таблицу:
так -- проходит:
select a.user_id, 
       a.name,
       c.ID,
       case id when 1 then cast(corso1 as varchar(10))
               when 2 then cast(corso2 as varchar(10))
               when 3 then cast(corso3 as varchar(10))
       end as qualifica, 
       case id when 1 then anno1 
               when 2 then anno2
               when 3 then anno3
       end as anno
from anag a, corsi c


но почему не проходило без явного преобразования as varchar(10)?
select a.user_id, 
       a.name,
       c.ID,
       case id when 1 then corso1 
               when 2 then corso2 
               when 3 then corso3 
       end as qualifica, 
       case id when 1 then anno1 
               when 2 then anno2
               when 3 then anno3
       end as anno
from anag a, corsi c


и почему он хотел конвертировать строки в int?
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'operatore' to data type int.
23 мар 12, 14:08    [12301968]     Ответить | Цитировать Сообщить модератору
 Re: почему в самодельном unpivot надо явно указывать тип в case?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
beg_inner,

corso3 какого типа?
23 мар 12, 14:20    [12302078]     Ответить | Цитировать Сообщить модератору
 Re: почему в самодельном unpivot надо явно указывать тип в case?  [new]
beg_inner
Guest
ой, точно, он сам решил, что int, потому что там сплошной NULL, и я явно не указала varchar.
спасибо!!!!
23 мар 12, 14:27    [12302152]     Ответить | Цитировать Сообщить модератору
 Re: почему в самодельном unpivot надо явно указывать тип в case?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
beg_inner
он сам решил, что int, потому что там сплошной NULL


+ CASE возвращ. тип финального выражения выбирая наиболее приоритетный из всех претендентов. В данном случае INT - наиприоритетнейший.
23 мар 12, 14:51    [12302383]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить