ITEMMASTER 테이블에 ITEMID, ITEMNAME 컬럼이 있고
ITEMSTR 테이블에 TARITEM, SRCITEM, MGRNO 컬럼이 있습니다.
두개의 테이블을 조인을 해서 데이터를 조회를 하려고 하면 데이터가 중복으로 조회가 되는데요
ITEMID 가 TARITEM 또는 SRCITEM 중에 하나라도 있으면 데이터를 찾아와야 하는 쿼리거든요
어떻게 손을 봐야 할지 모르겠습니다.
도움 부탁드립니다.
이건 제가 짜본 쿼리 입니다.
SELECT itemid , itemname , taritem , srcitem , COUNT( mgrno ) cnt FROM itemmaster , itemstr WHERE itemid IN( taritem, srcitem ) GROUP BY itemid , itemname , taritem , srcitem ORDER BY itemid , itemname
결과:
itemid | itemname | taritem | srcitem | cnt |
---|---|---|---|---|
00001 | TESTITEM | 00001 | 00002 | 1 |
00002 | null | 00001 | 00002 | 1 |
결과에 itemid 를 잘못적었습니다
대충 저희 테이블을 DUAL로 만들면
SELECT itemid , itemname , taritem , srcitem , COUNT( mgrno ) cnt FROM ( SELECT '00001' itemid, 'TESTITEM' itemname FROM dual UNION SELECT '00002', '' FROM dual ) itemmaster , ( SELECT '00001' taritem, '00002' srcitem, 1 mgrno FROM dual UNION SELECT '00003' taritem, '00004' srcitem, 1 mgrno FROM dual ) itemstr WHERE itemid IN( taritem, srcitem ) GROUP BY itemid , itemname , taritem , srcitem ORDER BY itemid , itemname , taritem , srcitem
이와 같은 형태인데
제가 원하는 결과는
itemid | itemname | taritem | srcitem | cnt |
---|---|---|---|---|
00001 | TESTITEM | 00001 | 00002 | 1 |
이렇게 하나의 행만 표시되게 하고 싶거든요
select
itemid,
itemname,
taritem,
srcitem,
cnt
from(
select
itemid,
itemname,
taritem,
srcitem,
count(*) over(partition by itemid,itemname,taritem,srcitem) as cnt
from itemmaster,itemstr
where itemid = taritem
union
select
itemid,
itemname,
taritem,
srcitem,
count(*) over(partition by itemid,itemname,taritem,srcitem) as cnt
from itemmaster,itemstr
where itemid = srcitem
) T
order by itemid,itemname;
어떤 걸 원하시는 지 정확히 모르겠는데 대충 이런 거 인 듯해서 작성해봤습니다.