2011-09-07 4 views
1

CASE 문을 사용하여 SELECT를 수행하려고하는데 이해가되지 않는 오류가 발생합니다. 내 구문은 SQL 구문 규칙을 따르는 것으로 보이지만 여러 부분 식별자 to_do를 얻고 있습니다 [item_id] AND 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

당신은 [item] = CASE ...

로 아마 의도 열 별칭 to_do.[item] = CASE ...에서 테이블 접두사를 사용할 수 없습니다 (또한 당신이 CASE의 중간에 불량 AS을 다음과 같이 나는 다시 것 자체)를 제거해야한다는

+0

이 올바른 것으로 나타났습니다 ... 내가 AS를 제거한 후 – Encryption

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

나는 그것을 전혀 필요 믿지 않는다 ... – djeidot

+0

아니요. 'Alias ​​= expression'은 열 별칭을 정의하는 데 완벽하게 유효합니다. 'AS to_do. [item]'는 동일한 테이블 접두사 문제를 갖습니다. –

+0

좋은 지적. 처음에는'Alias ​​= expression' 폼을 보지 못했습니다. 명확히하기 위해 편집 됨. – dmc

1

귀하의 AS 시도 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] ,