2014-08-29 6 views
1

У меня есть следующая таблицаSQL Server Pivot несколько столбцов

c1 b1 y1 sk sales cogs 
in b2b 2012 s1 1000 900 
in b2b 2012 s2 1100 1050 
in b2b 2011 s1 1000 900 

Я хочу поворачиваясь на несколько колонок. Я попробовал несколько, но не в состоянии генерировать ниже выхода

c1 b1 sk sales_2012 sales_2011 cogs_2012 cogs_2011 
in b2b s1 1000   1000   900 900 
in b2b s2 1100      1050 

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

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

+0

Просьба указать, какой код вы использовали, чтобы попытаться выполнить эту работу. – Utrolig

+0

Я строю 'SELECT * FROM [DBO] .s1 PIVOT (сумма (net_sales) ДЛЯ у1 ([2013], [2012])) pvttable SELECT * FROM [DBO] применить .s1 крест ( выберите net_sales, sum (net_sales) union all select cogs, sum (cogs)) c (col, val) pvttable'. Я знаю, что я далеко, что я ожидаю. – Ajay

+0

Могу ли я сделать рекомендацию? Возьмите имя своего вопроса, вставьте его в строку поиска вверху справа и посмотрите, что получится. – AHiggins

ответ

1

Вы можете сделать это довольно легко с профсоюзом в одной оси.

Select * 
FROM 
(SELECT c1, b1, 'sales_' + CAST(y1 AS VARCHAR(4)) AS Dimension, sk, sales AS Value 
    FROM dbo.s1 
    UNION ALL 
    SELECT c1, b1, 'cogs_' + CAST(y1 AS VARCHAR(4)) AS Dimension, sk, cogs AS Value 
    FROM dbo.s1 
    ) AS p 
    PIVOT 
    (
    SUM(Value) 
    FOR Dimension IN 
    (sales_2012, sales_2011 , cogs_2012 , cogs_2011) 
) AS pvt 
+1

Если 'y1' является числовым типом, вам нужно отдать его в varchar для конкатенаций. – wdosanjos

+0

Спасибо wdosanjos Я пропустил это. Я отредактировал сообщение, чтобы добавить бросок. – Shriike