안녕하세요. 테이블을 두 번 읽어야 하지만 ( 읽을 수 밖에 없지만 ) ... 이렇게 해 보시지요? (오라클 기준입니다)
WITH t AS (
SELECT 4 aa, 375 bb, 678 cc FROM dual UNION ALL
SELECT 4, to_number(NULL), to_number(NULL) FROM dual UNION ALL
SELECT 5, to_number(NULL), to_number(NULL) FROM dual
)
SELECT aa, bb, cc, NVL(dd, 'N') dd
FROM (
SELECT aa, bb, cc,
(SELECT 'Y'
FROM dual
WHERE EXISTS (SELECT 1 FROM t b
WHERE a.aa = b.aa
AND (b.bb IS NOT NULL OR b.cc IS NOT NULL)
)
) dd
FROM t a
)
ORDER BY aa, bb, cc;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | -- MSSQL 기준 WITH DT AS ( SELECT 4 AA, 123 BB, 456 CC UNION ALL SELECT 4, NULL , NULL UNION ALL SELECT 5, NULL , NULL UNION ALL SELECT 6, 123, NULL UNION ALL SELECT 7, NULL , 456 ) SELECT AA , BB , CC , ( CASE WHEN SUM (BB) OVER(PARTITION BY AA) IS NOT NULL OR SUM (CC) OVER(PARTITION BY AA) IS NOT NULL THEN 'Y' ELSE 'N' END ) AS DD FROM DT |
1 2 3 4 5 6 7 8 9 10 11 | with tmp as ( select 4 as AA, 1112 as BB, 1111 as CC from dual union all select 4 as AA, null as BB, null as CC from dual union all select 5 as AA, null as BB, null as CC from dual ) select AA, BB, CC , case when m_bb is not null or m_cc is not null then 'Y' else 'N' end as DD from ( select AA, BB, CC , max (BB) over(partition by AA) as m_bb , max (CC) over(partition by AA) as m_cc from tmp) t |