Pivot в sqlserver - PullRequest
       2

Pivot в sqlserver

1 голос
/ 01 июня 2011

Как преобразовать таблицу формата на основе значения в «Col1». Пусть начальное содержимое таблицы будет

Col1    Col2    Cnt     color
----------------------------
1       1       5       green
1       2       0       blue
1       3       7       red
2       1       0       gray
2       2       10      yellow
2       3       8       orange

В таблицу следующего формата

c11  d11  e11  color11  c12  d12 e12  color12  c13  d13 e13 color13
------------------------------------------- -----------------------
1    1    5  green       1   2    0    blue     1   3    7   red
2    1    0  gray        2   2    10   yellow   2   3    8   orange

запрос используется для генерации набора данных для отчета.где я строю пузырьковую диаграмму для каждой координаты x, y.

"c11 d11 e11 c12 d12 e12 c13 d13 e13" - имена столбцов в новом наборе данных.Так как столбцы могут динамически изменяться, я процитировал это следующим образом.

Я использую цвет для отображения цвета для каждого значения пузырька

Может ли кто-нибудь помочь в этом запросе?

1 Ответ

0 голосов
/ 01 июня 2011

Я не думаю, что решение PIVOT - это то, что вам действительно нужно. Вместо этого вы можете сделать следующее

WITH TestData AS
(
SELECT 1 Col1, 1 Col2, 5 Cnt, 'green' color
UNION SELECT 1 , 2 , 0 Cnt, 'blue'
UNION SELECT 1 , 3 , 7 Cnt, 'red'
UNION SELECT 2 , 1 , 0 Cnt, 'gray'
UNION SELECT 2 , 2 , 10 Cnt, 'yellow'
UNION SELECT 2 , 3 , 8 Cnt, 'orange'

)
SELECT 
    t1.col1 c11 , 
    t1.col2 d11 ,
    t1.cnt e11,
    t1.color  color11,
    t2.col1 c12   , 
    t2.col2 d12 ,
    t2.cnt e12,
    t2.color  color12  ,
    t3.col1 c13 , 
    t3.col2 d13 ,
    t3.cnt e13,
    t3.color  color13


FROM 
    TestData t1
    inner join TestData t2 
    ON t1.Col1 = t2.Col1 
    inner join TestData t3 
    ON t1.Col1 = t3.Col1 
where t1.Col2 = 1
    and t2.Col2 = 2
    and t3.Col2 = 3

Что выводит это

c11 d11 e11 color11 c12 d12 e12 color12 c13 d13 e13 color13
--- --- --- ------- --- --- --- ------- --- --- --- -------
1   1   5   green   1   2   0   blue    1   3   7   red
2   1   0   gray    2   2   10  yellow  2   3   8   orange

(2 row(s) affected)

Полагаю, вам, вероятно, потребуется динамически генерировать этот sql в своем решении, а не статическое решение, которое у меня есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...