2013-07-29 1 views
0

Мне нужен SQL запрос для заполнения данных в переломную структуре, позволяет сказать, что у меня есть в таблице ниже в качестве примера, мне нужен запрос в сервере SQL 2008Pivot Структура в SQL

ID|EMAIL|Name|Region|Catergory 
1|[email protected]|A|AMERICA|PP 
2|[email protected]|B|EMEA|CC 
3|[email protected]|C|APAC|PP 
4|[email protected]|D|APAC|DD 
5|[email protected]|E|EMEA|CC 
6|[email protected]|ED|UNKNOW|CC 

Есть ли способ получить таблицу ниже структуры поворота, ниже результат я хотел бы из приведенных выше таблиц в подсчетах,

Category|AMERICAS|EMEA|APAC|UNKNOW 

PP|1|0|0|0 
CC|0|2|0 
DD|0|0|1|0 
+1

Фраза «Пожалуйста, предоставьте мне запрос» заставляет меня думать, что вы не приближаетесь к этому сайту с правильным отношением. – bendataclear

+0

thams bendataclear, я удалил ... – IAmHomes

ответ

4
SELECT * 
FROM 
(
    SELECT id, Catergory, region 
    FROM table1 
) AS t 
PIVOT 
(
    COUNT(ID) 
    FOR Region IN([AMERICAS], 
       [EMEA], 
       [APAC], 
       [UNKNOW]) 
) AS p; 

DECLARE @cols AS NVARCHAR(MAX); 
DECLARE @query AS NVARCHAR(MAX); 


select @cols = STUFF((SELECT distinct ',' + 
         QUOTENAME(Region) 
         FROM table1 
         FOR XML PATH(''), TYPE 
        ).value('.', 'NVARCHAR(MAX)') 
         , 1, 1, ''); 

SELECT @query = 'SELECT * 
FROM 
(
    SELECT id, Catergory, region 
    FROM table1 
) AS t 
PIVOT 
(
    COUNT(ID) 
    FOR Region IN(' + @cols + ')) AS p;'; 

execute(@query); 
+0

Можно ли получить динамический регион ... – IAmHomes

+0

@SAK - Да, см. Мой обновленный ответ. –

+1

+1 - за хороший ответ. – Devart

1

Попробуйте один -

DECLARE @temp TABLE 
(
    ID INT, 
    Name CHAR(2), 
    Region VARCHAR(10), 
    Catergory CHAR(2) 
) 

INSERT INTO @temp (ID, Name, Region, Catergory) 
VALUES 
    (1, 'A', 'AMERICA', 'PP'), 
    (2, 'B', 'EMEA', 'CC'), 
    (3, 'C', 'APAC', 'PP'), 
    (4, 'D', 'APAC', 'DD'), 
    (5, 'E', 'EMEA', 'CC'), 
    (6, 'ED', 'UNKNOW', 'CC') 

SELECT * 
FROM (
    SELECT Name, Region, Catergory 
    FROM @temp 
) src 
PIVOT (
    COUNT(Name) 
    FOR Region IN (AMERICAS, EMEA, APAC, UNKNOW) 
) pvt 

Выход -

Catergory AMERICAS EMEA  APAC  UNKNOW 
--------- ----------- ----------- ----------- ----------- 
CC  0   2   0   1 
DD  0   0   1   0 
PP  0   0   1   0