2011-09-07 48 views
1

我想做一個使用CASE語句的SELECT,並且我得到的錯誤沒有意義。我的語句似乎遵循任何SQL語法規則,但我得到了多部分標識符to_do。[item_id]和to_do。[item]無法綁定。 這沒有意義,因爲列名是相對於表列修正複雜的SQL情況何時

這裏是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這樣,但也許我我只是盯着它看了太久,並沒有看到明顯的。 謝謝!

回答

5

不能使用表前綴列別名to_do.[item] = CASE ...據推測意欲[item] = CASE ...

(另外你在CASE中間有一個流氓AS本身需要刪除)

+0

發現這是正確的以及...我刪除了AS後 – Encryption

5

The 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] , 
... 
+0

我不相信它是需要在所有... – djeidot

+0

沒有。 「別名=表達式」對定義列別名非常有效。 'AS to_do。[item]'會有相同的表前綴問題。 –

+0

好點。起初我沒有看到「別名=表達式」表單。編輯澄清。 – dmc

1

你作爲是在錯誤的place--嘗試

  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] , 
相關問題