2012-05-03 5 views
0

У меня есть таблица, называемая #MonthlySales, которая вытягивает ItemNumber, MonYearNum & UnitsSold. Я повернута это с помощью следующего сценария:SQL Server Pivot Table - Dynamic

SELECT 
    ITEMNUMBER [SKU] 
    , ISNULL([1-2011], 0) [Jan 11] 
    , ISNULL([2-2011], 0) [Feb 11] 
    , ISNULL([3-2011], 0) [Mar 11] 
    , ISNULL([4-2011], 0) [Apr 11] 
    , ISNULL([5-2011], 0) [May 11] 
    , ISNULL([6-2011], 0) [Jun 11] 
    , ISNULL([7-2011], 0) [Jul 11] 
    , ISNULL([8-2011], 0) [Aug 11] 
    , ISNULL([9-2011], 0) [Sep 11] 
    , ISNULL([10-2011], 0) [Oct 11] 
    , ISNULL([11-2011], 0) [Nov 11] 
    , ISNULL([12-2011], 0) [Dec 11]

, ISNULL([1-2012], 0) [Jan 12] 
, ISNULL([2-2012], 0) [Feb 12] 
, ISNULL([3-2012], 0) [Mar 12] 
, ISNULL([4-2012], 0) [Apr 12] 
, ISNULL([5-2012], 0) [May 12] 
, ISNULL([6-2012], 0) [Jun 12] 
, ISNULL([7-2012], 0) [Jul 12] 
, ISNULL([8-2012], 0) [Aug 12] 
, ISNULL([9-2012], 0) [Sep 12] 
, ISNULL([10-2012], 0) [Oct 12] 
, ISNULL([11-2012], 0) [Nov 12] 
, ISNULL([12-2012], 0) [Dec 12] 

ИЗ #MONTHLYSALES PIVOT ( СУММА (UNITSSOLD) ДЛЯ MONTHYEARNUM В ( [1-2011], [2-2011], [3- 2011], [4-2011], [5-2011], [6-2011], [7-2011], [8-2011], [9-2011], [10-2011], [11-2011] , [12-2011] , [1-2012], [2-2012], [3-2012], [4-2012], [5-2012], [6-2012], [7-2012] , [8-2012], [9-2012], [10-2012], [11-2012], [12-2012] ) ) AS TOTSOLDPERMONTH ORDER BY ITEMNUMBER


Как вы можете видеть, столбец MonthYearNum жестко закодирован в значения, такие как 1-2011. Однако я не могу их жестко кодировать, поскольку они динамичны - в зависимости от того, в какой день этот отчет запущен, разные значения MonthYearNum будут возвращены из таблицы #monthlysales.

Есть ли способ для меня динамически поворачивать возвращаемые значения?

TIA

ответ

1

Yep - написать динамический SQL. Это сложно, а не переписывать аналогичный код (потому что я lazy), пожалуйста, обратитесь к моему ответу на this question для образца. Это код для динамического univot, но концепция такая же.

+0

Эй, спасибо. В вашем примере, как выглядит функция GetTableColumnNames? – Rivka

+0

Это была функция, определяемая человеком, отправляющим вопрос - ах, код для него указан выше, в актуальном вопросе. –

0

В качестве альтернативы - на что это выводится? SSRS, построитель отчетов, Excel и большинство сторонних инструментов отчетности будут выполнять перекрестную пересылку для вас.

+0

Правда. Динамические опорные точки в SQL - это королевская боль в кейстере. –