复杂的SQL CASE WHEN

时间:2011-09-07 14:57:20

标签: sql

我正在尝试使用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,但也许我只是盯着它看太久而且看不到明显的。 谢谢!

3 个答案:

答案 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] ,