sql - 创建以月份范围作为列的 SQL 表并使用表数据填充字段

标签 sql sql-server sql-server-2008-r2

我需要创建一个 SQL 表或 View ,为两个日期范围内的每个月生成列。因此,01/01/2014 - 04/01/2014 的范围将生成四列,标题分别为 Jan 2014、Feb 2014、March 2014、April 2014。我还需要它来使用与这些月份相关的数据填充字段下表,而任何没有适当数据的字段将用空值填充:

------------------------------------------------------
|     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。

一段时间以来我一直在努力解决这个问题,但没有任何运气,任何帮助将不胜感激!

最佳答案

您可以使用 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

如果您需要能够根据日期改变列数,则需要使用动态 SQL 来生成上述查询。 SO 上确实有数百个关于此的问题。 I think this one会有所帮助(或者可能是 BlueFeet 的任何一个答案!)

关于sql - 创建以月份范围作为列的 SQL 表并使用表数据填充字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22074443/

相关文章:

sql-server-2008 - 为什么在存储过程调用的参数之一上使用 CONVERT 会出错?

mysql - 导入脚本时未选择数据库

mysql - 如何在mysql中选择多行时在顶部显示特定行

c# - 使用自定义 CommandTimeout 的 WebMatrix Database.Query

sql-server - T-SQL 异或运算符

sql - 动态 PIVOT 查询 - 如何将其保存在 SQL Server 中?

sql - SQL Server 中的 View

SQL Server 2008 R2 子查询分组、汇总和计数

sql - 识别在任意 60 分钟内仅调用过一次电话的用户

mysql - 查找列值变化的位置