SQL-запрос с использованием Pivot - PullRequest
1 голос
/ 29 августа 2011

У меня есть следующая таблица:

PriorityText  Priority  LoRes   Partial  Unknown  N_A      HiRes
------------------------------------------------------------------
Very High     5         0.0612  0.0000   0.0612   0.0612   0.2041
High          4         0.1429  0.0000   0.1633   0.0000   0.1633
Medium        3         0.0000  0.0000   0.1020   0.0000   0.0408
Low-Medium    2         0.0000  0.0000   0.0000   0.0000   0.0000
Low           1         0.0000  0.0000   0.0000   0.0000   0.0000

Я пытаюсь перенести таблицу в это:

PriorityText  Low  Low-Medium  Medium  High    Very High
--------------------------------------------------------
Priority      1    2           3       4       5
LoRes         0    0           0       0.1429  0.0612
Partial       0    0           0       0       0
Unknown       0    0           0.102   0.1633  0.0612
N_A           0    0           0       0       0.0612
HiRes         0    0           0.0408  0.1633  0.2041

Я использую SQL 2008. У меня проблемы с созданием синтаксиса SQL для выполнения разворота данных.

Может кто-нибудь поделиться фрагментом SQL, который решит это для меня?

Я использовал следующее для успешного поворота одной строки, но я не знаю, как сделать так, чтобы она выполняла все мои строки.

SELECT VeryHigh AS VeryHigh, 
       High AS High, 
       Medium AS Medium, 
       [Low-Medium] AS [Low-Medium], 
       Low AS Low
 FROM  (SELECT [PriorityText], [LoRes] FROM @tbTemp) p
PIVOT (SUM(LoRes) FOR [PriorityText] in ([VeryHigh], [High], [Medium], [Low-Medium], [Low])) pvt

Мои данные испытаний в моей таблице выглядят следующим образом:

Priority PriorityText   LoRes   Partial  Unknown   N_A    HiRes
1        VeryHigh       0.05    11       54        0      9
2        High           0.14    22       54        0      3
3        Medium         0.07    33       65        0      7
4        Low-Medium     0.01    44       87        0      4
5        Low            0       55       9         0      0
NULL     NULL           NULL    NULL     NULL      NULL   NULL

Спасибо за любую помощь !!

1 Ответ

0 голосов
/ 29 августа 2011

Не уверен, насколько жестко вы можете сделать это, но то, что вы хотите сделать, это транспонировать строки с колонками.

SELECT p.[Type] as 'PriorityText', Low, [Low-Medium], Medium,High,[VeryHigh]
FROM (SELECT PriorityText, [Holder],[Type]
      FROM (SELECT PriorityText,Priority,LoRes,[Partial],Unknown,N_A,HiRes
              FROM Test) as sq_source
      UNPIVOT ([Holder] FOR [Type] IN
        (Priority,LoRes,[Partial],Unknown,N_A,HiRes)) as sq_up
     ) as sq 
 PIVOT (
    MIN([Holder])
    FOR PriorityText IN
       (VeryHigh,High,Medium,[Low-Medium],Low)
       ) as p
    order by CASE p.[Type] WHEN 'Priority' THEN 1
    WHEN 'LoRes' THEN 2
    WHEN 'Partial' THEN 3
    WHEN 'Unknown' THEN 4
    WHEN 'N_A' THEN 5
    ELSE 6 END ASC;

Это должно дать вам то, что вам нужно.Следует отметить, что это работает, только если столбцы:

  • Приоритет
  • LoRes
  • Частичный
  • Неизвестный
  • N_A
  • HiRes

относятся к одному и тому же типу данных (в моем тесте это было десятичное число (5,4)).Если вы не уверены, что вам нужно сделать исходный выбор и преобразовать их в общий тип данных и использовать его в качестве sq_source.

...