我有一个包含产品ID和名称的表格,另一个表格包含这些产品在特定日期的库存.如Item1在1-1-2014有6个库存,在2-1-2014有8个库存.
我试图在存储过程中显示这些内容,使其看起来像一个日历,显示一个月中的所有日期以及单元格中可用的库存.展示这个的最佳方式是什么?
我试图在存储过程中显示这些内容,使其看起来像一个日历,显示一个月中的所有日期以及单元格中可用的库存.展示这个的最佳方式是什么?
例如:
Name | 1-1-2014 | 2-1-2014 | 3-1-2014 | 4-1-2014 Item1 | 6 | 8 | | 6 Item2 | | 2 | 1 |
原始表 – 名称
ID | Name 1 | Item1 2 | Item2
原始表 – Stockdates
ID | NameID | Stock | Date 1 | 1 | 8 | 2-1-2014 2 | 2 | 2 | 4-1-2014
解决方法
这是您的示例表
SELECT * INTO #Names FROM ( SELECT 1 ID,'ITEM1' NAME UNION ALL SELECT 2 ID,'ITEM2' NAME )TAB SELECT * INTO #Stockdates FROM ( SELECT 1 ID,1 NAMEID,8 STOCK,'2-1-2014 ' [DATE] UNION ALL SELECT 2 ID,2 NAMEID,2 STOCK,'4-1-2014 ' [DATE] )TAB
将连接数据放入一个temperory表
SELECT N.NAME,S.[DATE],S.STOCK INTO #TABLE FROM #NAMES N JOIN #Stockdates S ON N.ID=S.NAMEID
获取枢轴列
DECLARE @cols NVARCHAR (MAX) SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR,[DATE],106) + ']','[' + CONVERT(NVARCHAR,106) + ']') FROM (SELECT DISTINCT [DATE] FROM #TABLE) PV ORDER BY [DATE]
现在转动它
DECLARE @query NVARCHAR(MAX) SET @query = ' SELECT * FROM ( SELECT * FROM #TABLE ) x PIVOT ( SUM(STOCK) FOR [DATE] IN (' + @cols + ') ) p ' EXEC SP_EXECUTEsql @query
你的结果就在这里