【问题标题】:Select column name dynamically based on rows from another table in SQL server根据 SQL Server 中另一个表中的行动态选择列名
【发布时间】:2018-09-13 10:28:53
【问题描述】:

我需要做出以下情况。我需要一个 .DATE_TIME 字段来在括号中找到正确的列名。因为每天都有列,我需要从 SHIFT_TABLE 计算天数。列名以“TPR”加天开头,如 TPR13

DECLARE @SQLText NVARCHAR(MAX) = ''
SELECT  @SQLText += 'SELECT (SELECT '
SELECT  @SQLText += ( 'TPR' +  Convert(varchar,DATEPART(day,a.DATE_TIME) )
        ) +
        ' from SHIFT_TABLE as s Where s.id = a.id ) from MAIN_TABLE as a where a.id=''1'' and a.ay=''12'' and a.yil=''2018''  '

print @SQLText

我收到错误消息:无法绑定多部分标识符“a.DATE_TIME”。

SHIFT_TABLE 出现 id 和 TPR01,TPR02,...TPR31 列 MAIN_TABLE 出现 id、ay、yil 和 DATE_TIME 列

我必须从 a.DATE_TIME 开始计算日期。

因此,我尝试像这样到达,SELECT (SELECT TPR13 from SHIFT_TABLE as s Where s.id = a.id) from MAIN_TABLE as a where a.id='1' and a.ay='12'和 a.yil='2018'

我该如何解决?非常感谢,

【问题讨论】:

  • 您可能可以使用 UNPIVOT 而不是编写这样的查询。发布表的架构、一些示例数据以及您期望的输出。顺便说一句,您现在不要在查询中使用任何其他表。您有一个包含字符串并包含Convert(varchar,DATEPART(day,a.DATE_TIME) ) 函数调用的语句。这里没有涉及表,这就是您收到该错误的原因。
  • 或者您可以在 SELECT 中使用 CASE WHEN 子句根据日期返回不同的列。
  • 你好,如果可以的话,你能举个例子或更正一下上面的代码吗?我尝试了许多不同的方法,但我找不到简单的方法。
  • 我不能,因为你没有解释你想做什么。没有表模式,没有预期的结果。你只有一张桌子吗?那为什么标题要写from another table呢?
  • 我在我的问题中添加了详细信息。请检查一下好吗?

标签: sql sql-server stored-procedures


【解决方案1】:
DECLARE @SQLText NVARCHAR(MAX) = ''
SELECT  @SQLText += 'SELECT (SELECT '
SELECT  @SQLText += ( 'TPR' +  Convert(varchar,DATEPART(day,a.DATE_TIME) )
    ) +
    ' from SHIFT_TABLE as s Where s.id = a.id ) from MAIN_TABLE as a where a.id=''1'' and a.ay=''12'' and a.yil=''2018''  '
FROM [YourTableWhere_DATE_TIME_Exists] AS a
print @SQLText

【讨论】:

    猜你喜欢
    • 2018-11-20
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2020-02-16
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多