【问题标题】:SQL Server 2008: Creating dynamic column namesSQL Server 2008:创建动态列名
【发布时间】:2013-07-22 18:38:57
【问题描述】:

我有一个我无法解决的问题。我在 Microsoft SQL Server 2008 上工作,我有一个包含四列的表

Id
Date (2013-07, 2013-08, 2011-03, etc)
Amount 1 (100, 150, etc.) 
Amount 2 (100, 80, etc.)

如果是Amount 1 > 150,那么我需要使用Date 中的值作为列名创建新列,并将Amount 2 分配到Date 值后一个月开始的6 个(日期)期间。

应该是这样的:

      Id  Date      Amount 1  Amount 2
      ----------------------------------
      1   2013-07    160         60
      2   2013-10    180         80                            

      Id  Date     Amount 1  2013-08  2013-09  2013-10   2013-11   2013-12  2014-01 ...
      --------------------------------------------------------------------------------
      1   2013-07    160         10       10      10         10        10      10
      2   2013-10    180                                     20        20      20...   

我不知道该怎么做,非常感谢任何帮助!谢谢!

【问题讨论】:

    标签: sql-server-2008 tsql dynamic pivot pivot-table


    【解决方案1】:

    表本身不应该有这些额外的列,因为那将是一个非规范化的表结构。在许多情况下,这是一种糟糕的数据存储方式。但是您可以轻松地对现有表进行查询,该表将以您想要的形式返回其他列,以便您可以以这种方式显示它。查看PIVOT and UNPIVOT

    【讨论】:

    • 我实际上正在尝试进行查询,但我不知道如何动态返回列名。我已经尝试过 pivot 和 unpivot,但我无法让它工作。你能给我一个例子吗?谢谢!
    猜你喜欢
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2015-06-06
    相关资源
    最近更新 更多