我需要创建一个SQL表或视图,它会在两个日期之间的每个月生成列。因此2014年1月1日至2014年4月1日的范围将生成四个标题为2014年1月,2014年2月,2014年3月,2014年4月的标题。我还需要它来填充与这些月份相关的数据字段。在下表中,任何没有适当数据的字段都将使用空值填充:
------------------------------------------------------
| Project# | Months | MonthValues |
------------------------------------------------------
| 001 | Jan 2014 | 1 |
------------------------------------------------------
| 002 | Feb 2014 | 2 |
------------------------------------------------------
这应创建表格:
---------------------------------------------------------------------------------------
| Project# | Jan 2014 | Feb 2014 | March 2014 | April 2014 |
---------------------------------------------------------------------------------------
| 001 | 1 | null | null | null |
---------------------------------------------------------------------------------------
| 001 | null | 2 | null | null |
---------------------------------------------------------------------------------------
使用SQL Server 2008。
在没有任何运气的情况下试图了解这个问题,任何帮助都会非常感激!
答案 0 :(得分:2)
您可以使用PIVOT功能:
SELECT Project, [Jan 2014], [Feb 2014], [Mar 2014], [April 2014]
FROM T
PIVOT
( SUM(MonthValues)
FOR Months IN ([Jan 2014], [Feb 2014], [Mar 2014], [April 2014])
) pvt;
<强> Example on SQL Fiddle 强>
如果您需要能够根据日期更改列数,则需要使用Dynamic SQL生成上述查询。关于此,有数百个问题。 I think this one会有所帮助(或者可能是BlueFeet的任何一个答案!)
答案 1 :(得分:1)
CREATE TABLE #temp(Project# varchar(25), Months varchar(25),MonthValues int)
INSERT INTO #temp VALUES
('001','Jan 2014', 1),('002','Feb 2014',2)
Select Project#, [Jan 2014], [Feb 2014] FROM #temp
Pivot(
Max(MonthValues)
For Months In ([Jan 2014],[Feb 2014])
) As myPTable
DROP TABLE #temp