2013-06-23 40 views
1

我試圖使用列的別名在where子句中使用別名。例如:DB2 AS/400的iSeries在where子句

SELECT lmITNO AS Item_Number, lmBANO AS Lot, lmSTAS AS Status, 
lmRORN AS Order_Number FROM MVXJDTA.MILOMA WHERE Status = 'CCC' 
FETCH FIRST 1000 ROWS ONLY 

但後來我得到一個錯誤消息說:

列狀態不在指定的表。

反正我能做到這一點?

回答

5

如果你真的想在WHERE使用別名,而不是列本身,你可以派生表做到這一點:

SELECT a.* 
FROM 
(
    SELECT lmITNO AS Item_Number, lmBANO AS Lot, lmSTAS AS Status, 
    lmRORN AS Order_Number 
    FROM MVXJDTA.MILOMA 
) a 
WHERE a.Status = 'CCC' 
.... 
+0

那麼簡單,謝謝 –

5

where-clause在一份聲明中select-clause前處理:

WHERE子句指定一個由的R的那些行的量,搜索條件是真的中間結果表。 R是語句的FROM子句的結果。

重新寫入where子句引用實際的列名:

... 
WHERE A.lmSTAS = 'CCC' 
... 

common-table-expression可以用於預先處理選擇子句。例如:

WITH A AS (SELECT 
    lmITNO AS Item_Number, 
    lmBANO AS Lot, 
    lmSTAS AS Status, 
    lmRORN AS Order_Number 
FROM MVXJDTA.MILOMA) 
SELECT A.* FROM A WHERE A.Status = 'CCC' 
FETCH FIRST 1000 ROWS ONLY 

CTE的列,也可以由表標識符後列出它們被重命名。例如:

WITH A (Item_Number, Lot, Status, Order_Number) 
AS (SELECT 
    lmITNO, 
    lmBANO, 
    lmSTAS, 
    lmRORN 
FROM MVXJDTA.MILOMA) 
SELECT A.* FROM A WHERE A.Status = 'CCC' 
FETCH FIRST 1000 ROWS ONLY