2012-05-05 2 views
0

У меня есть следующая таблицаSQL-Server: как использовать сводную таблицу для получения результата?

DECLARE @sample TABLE 
(
    ColNam varchar(20), 
    C1 int 
) 


INSERT INTO @sample 
SELECT 'Admin', 1 UNION ALL 
SELECT 'Admin', 4 UNION ALL 
SELECT 'Admin', 7  UNION ALL 
SELECT 'NUser', 3 UNION ALL 
SELECT 'NUser', 6 UNION ALL 
SELECT 'NUser', 8 

SELECT * FROM @sample 

Я хочу, чтобы получить следующий формат:

Admin | 1 | 4 | 7 
NUser | 3 | 6 | 8 

All 1,4,7,3,6,8 can be variables . 

, какой метод можно использовать, чтобы получить этот результат? Сводная таблица? Какой будет лучший метод?

Пожалуйста, помогите мне.

Заранее благодарен!

+0

спасибо за точку из – RedsDevils

ответ

1
DECLARE @sample TABLE 
(
    ColNam varchar(20), 
    C1 int 
) 


INSERT INTO @sample 
SELECT 'Admin', 1 UNION ALL 
SELECT 'Admin', 4 UNION ALL 
SELECT 'Admin', 7 

SELECT * 
FROM 
(
    SELECT ColNam,C1 
    FROM @sample 
) A 
PIVOT 
(
    SUM(C1) FOR C1 IN([1],[4],[7]) 
) PVT 


--OR you might need this 

SELECT CAST(ColNam AS VARCHAR(100)) + ' | ' + CAST([1] AS VARCHAR(100))+ ' | ' + CAST([4] AS VARCHAR(100))+ ' | ' + CAST([7] AS VARCHAR(100)) 
FROM 
(
    SELECT ColNam,C1 
    FROM @sample 
) A 
PIVOT 
(
    SUM(C1) FOR C1 IN([1],[4],[7]) 
) PVT 
+0

спасибо за ответ, если я хочу не только «Администратор» я могу иметь другой «Nuser» с разными значениями. Как я могу его получить? – RedsDevils

0

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

-- Create Table 
CREATE TABLE tbl_sample (ColNam varchar(20),C1 int) 

-- Insert Data 
INSERT INTO tbl_sample 
SELECT 'Admin', 1 UNION ALL 
SELECT 'Admin', 4 UNION ALL 
SELECT 'Admin', 7 UNION ALL 
SELECT 'NUser', 1 UNION ALL 
SELECT 'NUser', 5 UNION ALL 
SELECT 'NUser', 4 

-- Because my C1 column can be variable so I create dynamic like following 
DECLARE @PivotColumnHeaders VARCHAR(MAX) 
SELECT @PivotColumnHeaders = 
COALESCE(
    @PivotColumnHeaders + ',[' + cast(C1 as varchar) + ']', 
    '[' + cast(C1 as varchar)+ ']' 
) 
    FROM tbl_sample 
    GROUP BY C1 

-- Then Select like following 
DECLARE @PivotTableSQL NVARCHAR(MAX) 
SET @PivotTableSQL = N' 
    SELECT * 
    FROM (
    SELECT ColNam,C1 
    FROM tbl_sample 
) AS PivotData 
    PIVOT (
    MAX(C1) 
    FOR C1 IN (
     ' + @PivotColumnHeaders + ' 
    ) 
) AS PivotTable 
' 

EXECUTE(@PivotTableSQL) 

Я получил результат, который хотел. Спасибо всем вам.

Я ссылается этот сайт Dynamic Pivot Table Queries in SQL

Редс

Смежные вопросы