我试图改变这样的数据:PIVOT SQL数据和填写空白
ItemID MonthAsInt Month Year InvType Quantity
4643 4 April 2011 Shipment 10
4643 5 May 2011 Shipment 10
4643 7 July 2011 Shipment 10
4643 8 August 2011 Destroy 10
4643 11 November 2011 Shipment 25
4643 12 December 2011 Picking 1
进入这个(基本上,12个月的快照):
February March April May June July August ...
Shipment 0 0 10 10 0 10 0
Picking 0 0 0 0 0 0 0
Destroy ...
我已经搞砸PIVIOT
方法,但我没有太多运气。在这一点上,我只有我GETDATE()
和GETDATE() - 12 months
之间需要日期的列表(与下面的查询检索):
DECLARE @BeginDate DATETIME
DECLARE @EndDate DATETIME
SET @BeginDate = GETDATE();
SET @EndDate = DATEADD(MONTH, -12, GETDATE());
WITH CTE_DatesTable
AS
(
SELECT @EndDate AS [Date]
UNION ALL
SELECT DATEADD(dd, 1, [date])
FROM CTE_DatesTable
WHERE DATEADD(dd, 1, [date]) <= @BeginDate
)
SELECT DISTINCT DATENAME(MONTH, [date]) + ' '
+ CAST(YEAR([date]) AS VARCHAR(4)) AS MonthYear,
YEAR([date]) AS YearAsInt,
MONTH([Date]) AS MonthAsInt
FROM CTE_DatesTable
ORDER BY YEAR([date]), MONTH([Date])
OPTION (MAXRECURSION 0)
看到查询在行动here。
我试图完成什么?我正朝着正确的方向走吗?任何帮助,将不胜感激!
什么也没有用PIVOT工作? – 2012-02-13 18:17:27
@ subt13,** Me **。我从来没有用过它,我不知道如何“填补空白”。例如,我需要为所有未包含在第一个结果集中的月份显示零。 – 2012-02-13 18:21:30
使用枢轴,就是这么做的。你可以使用isnull(...,0) – 2012-02-13 18:26:48