【问题标题】:Is there a way to select the current month column in SQL?有没有办法在 SQL 中选择当前月份列?
【发布时间】:2019-10-11 06:36:48
【问题描述】:

我正在尝试从表中选择多个列。一个是包含“MAY_A”(当前月份实际值)的列。月份分为多个列。

表格如下

ORG    ORG2    APR_A_CNT    MAY_A_CNT    ............
--------------------------------------------------------------
a      def    4             6
b      def    6             8
.      .      .             .  
.      .      .             .
.      .      .             .

我尝试过的如下。我从架构中选择了所需的列名 (MAY_A)。只是似乎无法让 SELECT 将其作为我想要的表中的列名。

SELECT  ORG, ORG2, (SELECT  COLUMN_NAME
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'SUMMARY'
            AND COLUMN_NAME LIKE '%' + UPPER(CONVERT(char(3), GETDATE(),0)) + '_A%')
FROM [DB].[dbo].[SUMMARY]

我目前有输出:

ORG    ORG2    (no column name)
--------------------------------
a      def     NULL   
b      def     NULL
.      .       .           
.      .       .
.      .       .

我想要的是:

ORG    ORG2    MAY_A_CNT
--------------------------
a      def     6
b      def     8
.      .       .           
.      .       .
.      .       .

【问题讨论】:

  • 这里需要动态SQL...,构建sql字符串,然后执行
  • 我已经建立了字符串。在我的代码中实现它时遇到问题。
  • test sub-select也,看起来这也没有返回数据
  • 我不知道该怎么做。任何指导将不胜感激。
  • 这就是为什么像这样的表格设计是个坏主意。动态信息应该在单元格内容中,而不是表格或列名。

标签: sql sql-server select subquery


【解决方案1】:

您可以使用CASE 选择您想要的列。

SELECT ORG, ORG2,
    CASE MONTH(GETDATE())
        WHEN 1 THEN JAN_A_CNT
        WHEN 2 THEN FEB_A_CNT
        WHEN 3 THEN MAR_A_CNT
        ...
        WHEN 12 THEN DEC_A_CNT
    END AS CUT_MONTH_CNT
FROM [DB].[dbo].[SUMMARY]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-09
    • 2020-07-21
    • 2015-09-28
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多