Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 PIVOT, UNPIVOT to CASE  [new]
RTYi
Member

Откуда:
Сообщений: 91
Может кто подскажет как можно переписать эти запросы без PIVOT и UNPIVOT?

1) SET @SQL1 = 'SELECT col1, '+@var1+' '+
'FROM (SELECT col1, col2, col3 '+
'FROM TB2 '+
'WHERE col4 = '+CONVERT(VARCHAR,@c)+
' AND APLICANOMINA = ''S''
AND COMP_CODE = '''+@COMP_CODE+'''
AND SUC_CODE = '''+@SUC_CODE+'''
AND DATE_YEAR = '''+@DATE_YEAR+''') up '+
'PIVOT (SUM(col3) FOR col2 IN ('+@var1+')) AS pvt'

2)SET @SQL2 ='SELECT col1, SUM(col3) col3 '+
'FROM ('+@SQLDED1+') p '+
'UNPIVOT
(col3 FOR col2 IN ('+@var1+')) AS Unpvt
GROUP BY col1'

3)SET @SQL3 = 'SELECT '+@Titulolist1+@pegar+@Titulolist2+@TITULORELLENO+
' FROM (SELECT col2, TITULO '+
'FROM STYDEDCR ) up '+
'PIVOT (MAX(TITULO) FOR col2 IN ('+@Titulolist+')) AS pvt'
9 ноя 09, 12:45    [7901014]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT, UNPIVOT to CASE  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
сильно зависит от того что вы хотите получить в итоге от этих запросов?
--------------------------------------------------------------
Дьявол кроется в деталях.
9 ноя 09, 12:51    [7901076]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT, UNPIVOT to CASE  [new]
iljy
Member

Откуда:
Сообщений: 8711
RTYi,

PIVOT, UNPIVOT и CASE связаны так:

select * from
(select a,b,c from Table) t
pivot
(
   max(c) for b in ([1],[2])
) pvt

-----
select a, max(case b when 1 then c end) [1], max(case b when 2 then c end) [2]
from Table
group by a
select * from
(select a,b,c from Table) t
unpivot
(
  col3 for col2 in (b,c)
) unpvt

---
select a, case N when 1 then 'b' when 2 then 'c' end col2,
         case N when 1 then b when 2 then c end col3
from
(select a,b,c from Table) t cross join
(select 1 N union all select 2) t2
9 ноя 09, 13:05    [7901198]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT, UNPIVOT to CASE  [new]
RTYi
Member

Откуда:
Сообщений: 91
iljy,

Спасибо, буду пробовать.
9 ноя 09, 13:11    [7901249]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT, UNPIVOT to CASE  [new]
RTYi
Member

Откуда:
Сообщений: 91
А если еще одна колонка добавится?

select * from
(select a,b,c,f from Table4) t
unpivot
(
col3 for col2 in (b,c,f)
) unpvt
12 ноя 09, 13:14    [7919938]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT, UNPIVOT to CASE  [new]
iljy
Member

Откуда:
Сообщений: 8711
RTYi,
значит еще одна строка добавится
select a, case N when 1 then 'b' when 2 then 'c' when 3 then 'f' end col2,
         case N when 1 then b when 2 then c when 3 then f end col3
from
(select a,b,c,f from Table) t cross join
(select 1 N union all select 2 union all select 3) t2
12 ноя 09, 13:31    [7920114]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить