2013-06-13 155 views
1

工作where子句中沒有與工作時,我寫了其中Prse =「H」它顯示了我一個錯誤「無效列」where子句中沒有與

;with cT(FLDID ,FLD10 ,FLD610) 
as 
(
select * from Table556 
inner join Table555 on table555.FLD9=FLD318 
where FLD610=150 
) 

select case when fld609 <=12 then 'h' else 's' end as Prse,* from cT 
where Prse ='h' 

回答

5

with無關用它。您只在最後的SELECT子句中引入了Prse - 並且您無法參考WHERE子句中的這些列(因爲WHERE在邏輯上運行之前SELECT)。

你想:

;with cT(Prse, FLDID ,FLD10 ,FLD610) 
as 
(
select case when fld609 <=12 then 'h' else 's' end as Prse, * from Table556 
inner join Table555 on table555.FLD9=FLD318 
where FLD610=150 
) 

select * from cT 
where Prse ='h' 
+0

@Dems - 完成。好的結果(我通常不會在我的CTE中使用明確的列列表) –

+0

thankx Damien_The_Unbeliever –

2

嘗試這一個 -

;WITH cte AS 
(
    SELECT 
      FLDID 
     , FLD10 
     , FLD610 
     , Prse = 
      CASE WHEN FLD609 <= 12 
       THEN 'h' 
       ELSE 's' 
      END 
    FROM dbo.Table556 t 
    JOIN dbo.Table555 t2 ON t2.FLD9 = t.FLD318 
    WHERE FLD610 = 150 
) 
SELECT * 
FROM cte 
WHERE Prse = 'h' 
+3

你曾經*提供任何你已經改變或解釋爲什麼?你似乎只有「嘗試這一個」或某個變體和一些代碼,然後問問題的人必須仔細研究以確定你已經改變了什麼。當然,他們沒有什麼學習機會,因爲他們只會發現你已經改變了什麼 - 從來沒有*爲什麼*。 –

+0

thankx Damien_The_Unbeliever –

+0

@Mir Shakeel Hussain,我不是達米安。 :) – Devart