【发布时间】:2012-03-05 03:50:06
【问题描述】:
我正在尝试转换这些数据:
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。
我想要完成的事情可能吗?我是否朝着正确的方向前进?任何帮助将不胜感激!
【问题讨论】:
-
@subt13,我。我从来没有用过它,我不太清楚如何“填空”。例如,我需要为未包含在第一个结果集中的所有月份显示零。
-
使用pivot,这就是它的用途。您可以使用 isnull(..., 0) 处理空值
-
@subt13,如果我能在几个小时后自己弄清楚,我就不会在 SO 上发帖了。
-
没问题。请看我的帖子。
标签: sql sql-server-2005 tsql pivot