我正在尝试使用CASE语句执行SELECT,并且我收到的错误没有意义。我的声明似乎遵循任何SQL语法规则,但我得到了好的“多部分标识符to_do。[item_id] AND to_do。[item]无法绑定。 这没有意义,因为列名相对于表列是正确的。
这是SQL:
SELECT to_do.[item_id],
to_do.[item] = CASE to_do.encounter_id WHEN 0 THEN CONVERT(NVARCHAR, e.[date], 101 ) + ' - ' + p.[first_name] + ' ' + p.[last_name] + ' - ' + to_do.[item] AS to_do.[item] ELSE to_do.[item] END,
to_do.[complete],
to_do.[encounter_id],
e.[date],
p.[last_name] + ', ' + p.[first_name] AS [p_name]
FROM [dbo].[to_do] LEFT OUTER JOIN
[dbo].[encounter] e ON
to_do.[encounter_id] = e.[encounter_id] LEFT OUTER JOIN
[dbo].[patients] p ON
e.[mrn] = p.[mrn]
WHERE to_do.[user_id] = @user_id
任何想法我在这里做错了什么?根据之前的经验,我应该可以像这样使用CASE,但也许我只是盯着它看太久而且看不到明显的。 谢谢!
答案 0 :(得分:5)
AS {alias}
需要追踪END
。我改写如下:
SELECT to_do.[item_id],
CASE to_do.encounter_id WHEN 0 THEN CONVERT(NVARCHAR, e.[date], 101 ) + ' - ' + p.[first_name] + ' ' + p.[last_name] + ' - ' + to_do.[item] ELSE to_do.[item] END AS [item] ,
...
答案 1 :(得分:5)
您不能在列别名中使用表格前缀to_do.[item] = CASE ...
可能是[item] = CASE ...
(你的AS
本身中间还有一个流氓CASE
,需要删除)
答案 2 :(得分:1)
你的AS在错误的地方 - 试试
to_do.[item] = CASE to_do.encounter_id WHEN 0 THEN CONVERT(NVARCHAR, e.[date], 101 ) + ' - ' + p.[first_name] + ' ' + p.[last_name] + ' - ' + to_do.[item] ELSE to_do.[item] END AS to_do.[item] ,