조건이 여러 행으로 나올 때 셀렉트 구하기 0 8 1,336

by 안녕하세요 [SQL Query] db2 query select [2021.12.17 10:07:53]


select

   상품,

  sum(원재료가격1),

  sum(원재료가격2),

  합

from 상품들

where 1=1

  and 날짜 btween 날짜1 and 날짜2

group by 상품

 

의 쿼리에서 

조건을 추가하고 싶은데

조건이 접수번호가 전월에서 수량이 0보다 큰 것이라는 것을 추가하고 싶습니다.

where절에 

and 접수번호 = (select 접수번호 from 상품들 where 수량>0 and 날짜=전월)

을 추가하게 되면 select가 1줄 보다 많다는 오류가 뜨는데 어떻게 해야 할까요?

 

  

by 안녕하세요 [2021.12.17 10:16:49]

left outer join에 전월 접수번호를 가져오고 

원래 퀄리에 그 접수번호를 넣어서 구하면 될까요?


by 우주민 [2021.12.17 10:26:32]

접수번호가 여러개가 나와서 문제인듯 하네요.

 

 

and 접수번호 IN (select 접수번호 from 상품들 where 수량>0 and 날짜=전월)

으로 처리하는 것은 어떤가요?


by 안녕하세요 [2021.12.17 10:32:54]

해보겠습니다!


by 안녕하세요 [2021.12.17 10:38:20]

이렇게 하면 전월 합을 불러오네요 ㅜ


by 우주민 [2021.12.17 13:16:41]
select
   상품,
  sum(원재료가격1),
  sum(원재료가격2),
  합(?)
from 상품들
where 1=1
  and 날짜 = 이번달 -- btween 날짜1 and 날짜2
  and 접수번호 IN (select 접수번호 from 상품들 where 수량>0 and 날짜=전월)
group by 상품

이러면 전월달 데이터를 가져올 수가 없을 텐데요....


by 안녕하세요 [2021.12.17 15:11:18]

값이 좀 이상합니다. 저도 정확히 어떤거라 말씀드리기 힘드네요


by 모래가흙흙 [2021.12.17 13:50:22]

접수번호 정확히 의미가 뭐지요?  

전월과  이번월과의 비교대상이 정확히 뭔가요?


by 마농 [2021.12.20 09:07:59]
-- 연결고리가 접수번호가 아닌 상품이 되어야 하지 않을까요?
-- 1. 서브쿼리(테이블 2번 사용)
SELECT 상품
     , SUM(원재료가격1) 원재료가격1
     , SUM(원재료가격2) 원재료가격2
     , ...
  FROM 상품들
 WHERE 1=1
   AND 날짜 BETWEEN 당월시작 AND 당월종료
   AND 상품 IN (SELECT 상품 FROM 상품들 WHERE 날짜 BETWEEN 전월시작 AND 전월종료)
 GROUP BY 상품
;
SELECT 상품
     , SUM(원재료가격1) 원재료가격1
     , SUM(원재료가격2) 원재료가격2
     , ...
  FROM 상품들 m
 WHERE 1=1
   AND 날짜 BETWEEN 당월시작 AND 당월종료
   AND EXISTS (SELECT 1
                 FROM 상품들 s
                WHERE s.날짜 BETWEEN 전월시작 AND 전월종료
                  AND s.상품 = m.상품
               )
 GROUP BY 상품
;
-- 2. Case 문 사용(테이블 1번 사용)
SELECT 상품
     , SUM(CASE WHEN 날짜 BETWEEN 당월시작 AND 당월종료 THEN 원재료가격1 END) 원재료가격1
     , SUM(CASE WHEN 날짜 BETWEEN 당월시작 AND 당월종료 THEN 원재료가격2 END) 원재료가격2
     , ...
  FROM 상품들
 WHERE 1=1
   AND 날짜 BETWEEN 전월시작 AND 당월종료
 GROUP BY 상품
HAVING COUNT(CASE WHEN 날짜 BETWEEN 전월시작 AND 전월종료 THEN 1 END) > 0
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입