MSSQL2008서버구요
select a.bp_cd,sum(b.SL_BOX_QTY),
(select a.bp_cd,count(i.LOT_NO) As_LOT_QTY <--요기서 에러나는건 당근인데요.
from s_dn_hdr h
inner join s_dn_dtl d
on h.dn_no = d.dn_no
inner join s_dn_lot_info i
on d.dn_no = i.dn_no and d.dn_seq = i.dn_seq
inner join S_SALES_DTL p
on p.DN_NO = i.DN_NO and p.DN_SEQ = i.DN_SEQ
inner join S_SALES_HDR a on a.SL_NO = p.SL_NO
where a.BIZ_AREA_CD='174520' and a.SL_DT='20140326'
group by a.bp_cd )Z <--그룹도 쓰면 하위쿼리를 EXISTS에러 어쩌구 나올테구요.
from S_SALES_HDR A
inner join S_SALES_DTL B on B.SL_NO = A.SL_NO
where a.BIZ_AREA_CD='174520' and a.SL_DT='20140326'
group by a.BP_CD
중요한건 결과값이
bp_cd | (열 이름 없음) |
21-0013 | 5 |
21-0019 | 7 |
21-0070 | 61 |
21-0072 | 47 |
21-0126 | 9 |
21-0187 | 31 |
21-0188 | 4 |
21-0204 | 26 |
21-0210 | 9 |
21-0213 | 13 |
21-0217 | 15 |
21-0227 | 25 |
21-0238 | 36 |
21-0246 | 7 |
21-0265 | 38 |
21-0275 | 26 |
Comment 8
-
건우아빠
2014.03.27 15:46
-
큘러
2014.03.27 17:42
답변 정말 감사드립니다.
bp_cd 가 한개만 조회할게 아니고 리스트에 보시는것처럼 전체가 다나와야 하는데 조건절에 어떻게 주면 되나요?
group by도 못쓰고요..
-
건우아빠
2014.03.28 10:00
샘플 자료와 정확히 나와야할 내용을 기술하셔야 할듯 합니다..
서브쿼리는 메인 쿼리 자료에 컬럼 하나를 보여주는 방식이구요...
버전이 2005이상이시면 cross apply (outer apply) 이용하시면 여러 컬럼을 가져올수있고 여거개의 값을 가져올수도 있습니다.
퀄리는 단순히 select문만 보고 판단하기는 어렵습니다.
업무내용이나 테이블의 구성 형태, 목적등을 알지 못하면 정확한 쿼리를 짤수가 없구요...
-
큘러
2014.03.28 12:42
답변감사드립니다. 샘플자료 첨부합니다. 한번 읽어주시기 부탁드립니다.
다시한번 감사드립니다. 이미지캡쳐 때문에 데이터를 잘라서 그렇지 데이터는 약 60건정도 됩니다.
-
건우아빠
2014.03.28 15:51
bp_cd로 카운트를 구한 뷰를 가지고 조인을 하셔도 됩니다.
방법은 여러가지가 가능합니다.
서브쿼리에 조건값에 bp_cd 를 주시면 안되나요.. ?
-
큘러
2014.03.28 16:24
bp_cd는 각거래처의 코드이기때문에 서브쿼리 조건값에 bp_cd는 한거래처 밖에 조회할수밖에 없습니다. F열에 각 bp_cd의
count값이 나와야 하므로 어떻게든 그룹으로 묶어야 하는 상황인거죠. 제가 꽁수를 잘몰라서 고단합니다.
여러가지 방법이 있다고 하셨는데 어떤건가요? 한일주일째 붙들고 있는거 같습니다.
요쿼리만 해결되면 되겠는데요..도움좀 부탁드립니다.
select sum(b.SL_BOX_QTY),
(select count(i.LOT_NO) AS LOT_QTY
from s_dn_hdr h
inner join s_dn_dtl d
on h.dn_no = d.dn_no
inner join s_dn_lot_info i
on d.dn_no = i.dn_no and d.dn_seq = i.dn_seq
inner join S_SALES_DTL p
on p.DN_NO = i.DN_NO and p.DN_SEQ = i.DN_SEQ
inner join S_SALES_HDR a on a.SL_NO = p.SL_NO
where a.BIZ_AREA_CD='174520' and a.SL_DT='20140326'
)Z
from S_SALES_HDR A
inner join S_SALES_DTL B on B.SL_NO = A.SL_NO
where a.BIZ_AREA_CD='174520' and a.SL_DT='20140326'
group by a.BP_CD -
큘러
2014.03.28 17:15
인라인뷰로 바꿔봤는데요. 각각 따로 조회하면 정상적인 데이터가 나오는데 붙여 놓으면 데이터가 이상하게 나오네요.
뭐가 문제죠?
select a.bp_cd,sum(b.SL_BOX_QTY),Z.LOT_QTY
from
(select a.bp_cd,count(i.LOT_NO) AS LOT_QTY
from s_dn_hdr h
inner join s_dn_dtl d
on h.dn_no = d.dn_no
inner join s_dn_lot_info i
on d.dn_no = i.dn_no and d.dn_seq = i.dn_seq
inner join S_SALES_DTL p
on p.DN_NO = i.DN_NO and p.DN_SEQ = i.DN_SEQ
inner join S_SALES_HDR a on a.SL_NO = p.SL_NO
where a.BIZ_AREA_CD='174520' and a.SL_DT='20140326'
group by a.BP_CD) AS Z ,
S_SALES_HDR A , S_SALES_DTL B
where B.SL_NO = A.SL_NO and a.BIZ_AREA_CD='174520' and a.SL_DT='20140326'
group by a.BP_CD ,Z.LOT_QTY -
처리짱
2014.03.28 18:00
조인의 갯수가 후덜덜 하네요.. 조인 테이블이 많으면은 임시테이블이나 테이블변수에 원하는 항목을 저장하면서 다시 조인해 가는 방법도...
select 절에 들어가는 서브쿼리는 하나의 컬럼만을 기술 하셔야 합니다. count(i.LOT_NO) 만 기술하시면 되구요.
a.bp_cd 는 조건절에 줘서 하나의 값만 나오게 하시면 됩니다.