2016-12-29 2 views
0

제 명령문에 동적 컬럼을 작성했습니다. 내 동적 열에서 다양한 CASE 문을 사용했습니다. 이제 WHERE 절에서 동적 열을 필터링 할 수 없습니다.동적 컬럼에 대한 DB2 SQL WHERE 절

SELECT 
    item1, 
    item2, 
    CASE WHEN item1 = '1' THEN '10' END AS item3 FROM "Table1" 
WHERE item3 = '10'; 

위의 문은 내 동적 열에서 필터를 사용할 때 오류가 발생합니다. where 절을 select 전에 실행 얻을 때문에

답변

0

첫째, item3하지 않습니다, where 실행 얻을 때 의미는 item3는 원래 열 아닌, 테이블을 참조

SELECT 
    item1, 
    item2, 
    CASE WHEN item = '1' THEN '10' END AS item3 
FROM TABLE 

두 번째 필요 있다.

You could do this way: 

SELECT * FROM (
SELECT 
    item1, 
    item2, 
    CASE WHEN item = '1' THEN '10' END AS item3, 
FROM TABLE) as A 
WHERE A.item3 = '10' 
0

파생 테이블에 쿼리를 랩 : Select 그래서 당신이 Where 절에 Select에서 생성 된 Alias 이름을 사용할 수 없습니다 전에 Where 절은 논리적으로 처리되기 때문에

select item1, item2, item3 
from 
(
    SELECT 
     item1, 
     item2, 
     CASE WHEN item = '1' THEN '10' END AS item3 
    FROM tablename 
) dt 
WHERE item3 = '10'; 
1

오류입니다.

은 또한 원치 않는 쉼표 테이블 이름 뒤에

가 사용할 수 있습니다 당신이 CASE 중첩/복잡한 경우 아마 다른 두 답변을 갈 것입니다 CASE 직접

SELECT item1, 
     item2, 
     CASE WHEN item = '1' THEN '10' END AS item3 
FROM "Table1" --, unwanted comma 
WHERE CASE WHEN item = '1' THEN '10' END = '10' 

Where에 명세서

+0

죄송합니다. 오타였습니다. 고맙습니다. –

0
//with cte 
with tmp as (
SELECT 
item1, 
item2, 
CASE WHEN item = '1' THEN '10' END AS item3 
FROM "Table1" 
) 
select * from tmp where item3='10' 

//with subselect 
select * from (
SELECT 
item1, 
item2, 
CASE WHEN item = '1' THEN '10' END AS item3 
FROM "Table1" 
) tmp where item3='10' 

//with reuse case 
SELECT 
    item1, 
    item2, 
    CASE WHEN item = '1' THEN '10' END AS item3 
FROM tablename where CASE WHEN item = '1' THEN '10' END ='10'