none
Оператор PIVOT RRS feed

  • Вопрос

  • Добрый день! Возникла маленькая проблемка, никак не могу понять, почему у меня не работает данный оператор(по примеру из учебника), в чем может быть ошибка, на что нужно обратить внимание... напишите, пожалуйста, как это должно быть написано в SQL запросе, я попробую сравнить?

    Итак мне нужно преобразовать запрос в другой вид...

    имеем допустим запрос в виде:

    Период   Филиал  ВЕС

    Янв             МСК       10

    Янв             СПБ        5

    Фев             МСК       15

    Фев             СПБ        3

    Март            МСК       10

    Март            СПБ        5

    Нужно один столбец ПЕРИОД трансформировать в горизонтальный вид, т.е. получить:

    ФИЛИАЛ     Янв     Фев     Март

    МСК          10        15       10

    СПБ           5          3         5

    Заранее спасибо!

    • Перемещено Siddharth Chavan 2 октября 2010 г. 0:17 MSDN Forums Consolidation (От:SQL Server для разработчиков)
    21 апреля 2010 г. 14:04

Ответы

  • declare @t table (month char(4), f char(3), v int)
    insert into @t
    select 'Янв', 'МСК', 10
    union all
    select 'Янв', 'СПБ', 5
    union all
    select 'Фев', 'МСК', 15
    union all
    select 'Фев', 'СПБ', 3
    union all
    select 'Март', 'МСК', 10
    union all
    select 'Март', 'СПБ', 5
    
    select f,
    SUM(case when month='Янв' then v else 0 end ) 'Янв',
    SUM(case when month='Фев' then v else 0 end ) 'Фев',
    SUM(case when month='Март' then v else 0 end ) 'Март'
    from @t
    group by f
    
    --ИЛИ
    
    select * from @t t
    pivot (sum(v) for month in ([Янв],[Фев], [Март] ) ) pv

    http://www.t-sql.ru
    • Помечено в качестве ответа I.Vorontsov 22 апреля 2010 г. 7:01
    21 апреля 2010 г. 15:32
    Модератор
  • select * from myTable PIVOT (SUM(Ves) for Period IN ([Янв],[Фев],[Март])) pvt     
    Premature optimization is the root of all evil in programming. (c) by Donald Knuth

    Naomi Nosonovsky, Sr. Programmer-Analyst

    My blog
    • Предложено в качестве ответа Alexey KnyazevModerator 21 апреля 2010 г. 15:31
    • Изменено Naomi N 21 апреля 2010 г. 15:47
    • Помечено в качестве ответа I.Vorontsov 22 апреля 2010 г. 7:01
    21 апреля 2010 г. 14:18

Все ответы

  • select * from myTable PIVOT (SUM(Ves) for Period IN ([Янв],[Фев],[Март])) pvt     
    Premature optimization is the root of all evil in programming. (c) by Donald Knuth

    Naomi Nosonovsky, Sr. Programmer-Analyst

    My blog
    • Предложено в качестве ответа Alexey KnyazevModerator 21 апреля 2010 г. 15:31
    • Изменено Naomi N 21 апреля 2010 г. 15:47
    • Помечено в качестве ответа I.Vorontsov 22 апреля 2010 г. 7:01
    21 апреля 2010 г. 14:18
  • declare @t table (month char(4), f char(3), v int)
    insert into @t
    select 'Янв', 'МСК', 10
    union all
    select 'Янв', 'СПБ', 5
    union all
    select 'Фев', 'МСК', 15
    union all
    select 'Фев', 'СПБ', 3
    union all
    select 'Март', 'МСК', 10
    union all
    select 'Март', 'СПБ', 5
    
    select f,
    SUM(case when month='Янв' then v else 0 end ) 'Янв',
    SUM(case when month='Фев' then v else 0 end ) 'Фев',
    SUM(case when month='Март' then v else 0 end ) 'Март'
    from @t
    group by f
    
    --ИЛИ
    
    select * from @t t
    pivot (sum(v) for month in ([Янв],[Фев], [Март] ) ) pv

    http://www.t-sql.ru
    • Помечено в качестве ответа I.Vorontsov 22 апреля 2010 г. 7:01
    21 апреля 2010 г. 15:32
    Модератор