我有一个表,其中提供了有关某项物品的库存信息。
这是表格的样子:
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]'
但是经过一些研究,我发现了使用数据透视表的可能性...
如何修改查询以获取所需的输出
答案 0 :(得分:2)
我可以使用下面的代码来获取它,您只需将#table替换为表名。还要忽略设置表的代码的第一部分。
此处有类似的问题/答案:SQL Server dynamic PIVOT query?
-------------------------------------------------------------------
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)