【发布时间】: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