Динамическая сводная таблица со столбцом даты - PullRequest
0 голосов
/ 01 мая 2019

У меня есть таблица, в которой доступна информация о наличии товара.

Вот как выглядит таблица:

ITEMCODE  DATE        INSTOCK
-----------------------------
ABC001    2019-01-04    10
ABC001    2019-02-04    10
ABC001    2019-03-04    10
ABC001    2019-04-04     5
ABC001    2019-05-04     5

Можно ли получить вывод следующим образом:

Itemcode   01/04/2019    02/04/2019  03/04/2019  04/04/2019   05/04/2019
-------------------------------------------------------------------------    
ABC001        10             10         10           5             5

Это запрос, который я использовал ...

SELECT T0.ITEMCODE,T0.INSTOCK 
FROM DBO.TABLE_2 T0
WHERE T0.DATE >='[%0]'AND T0.DATE <= '[%1]'

Но после некоторого исследования я выяснил, возможно ли это с помощью сводной таблицы ...

Как изменить мой запрос, чтобы получить желаемый результат

1 Ответ

3 голосов
/ 01 мая 2019

Я смог получить его с помощью приведенного ниже кода, вам просто нужно заменить #table на имя вашей таблицы. Также игнорируйте первую часть кода, которая устанавливает таблицу.

Здесь есть похожие вопросы / ответы: SQL Server динамический запрос PIVOT?

-------------------------------------------------------------------
IF OBJECT_ID('tempdb..#table') IS NOT  NULL
BEGIN
    DROP TABLE #table
END

CREATE TABLE #table(ITEMCODE VARCHAR(10),DATE date,INSTOCK int)

insert into #table values('ABC001','2019-01-04',10)
insert into #table values('ABC001','2019-02-04',10)
insert into #table values('ABC001','2019-03-04',10)
insert into #table values('ABC001','2019-04-04',5)
insert into #table values('ABC001','2019-05-04',5)
-------------------------------------------------------------------

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

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.DATE) 
            FROM #table c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ITEMCODE, ' + @cols + ' from 
            (
                select ITEMCODE
                    , DATE
                    , INSTOCK
                from #table
           ) x
            pivot 
            (
                 sum(INSTOCK)
                for DATE in (' + @cols + ')
            ) p '


execute(@query)

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