한개의 테이블에서 구분별로 리스트를 가져오는 쿼리 작성할려구 하는데..
쉽게 되지가 않네요..
테이블 구조는 아래와 같습니다.
테이블1
idx 구분 날짜 수량
1 1 20150101 1000
2 2 20150101 1000
4 1 20150101 500
3 2 20150102 1000
5 2 20150102 700
6 1 20150102 700
예상 출력 결과물
날짜 구분=1의 수량1 구분2의 수량2
20150101 1000 1000
20150101 500
20150102 700 1000
20150102 700
이렇게요..쉽계 생각했는데, 생각보다 까다롭네됴..
구분1의 자료가 구분2의 자료와 양이 동일 한것도 아니고,
둘다 유동적이다 보니..
어떤식으로 쿼리를 해야하나..고민중입니다.
도와주세요.~
Comment 3
-
건우아빠
2015.02.08 15:26
-
냥냥이맘
2015.02.08 20:00
건우 아빠님..감사요~~
위와 같은 쿼리는 해볼생각도 못하고 프로그램으로 해결했는데...
SQL은 하면 할수록 재미나네요..
복 받으실거예요..
저도 건우 아빠님 처럼, 남들에게 도움을 줄수 있도록 열공해야겠습니다.
아침부터 계속 골머리 섞히다가 프로그램 로직으로 마물 했는데,
위와 같이 쿼리로도 가능하다니~~
SQL에 대해 어떤 공부를 하면 건우 아빠님과 같은 쿼리를 구사할수 있을까요?
^^
여튼감사~~
행복한 2015년 되세요~
-
건우아빠
2015.02.09 11:19
다른분들 댓글 따라하시고 댓글 많이 달아 주시다 보면 쿼리는 공식과도 같은 거라 금방 하실수 있을겁니다..
수학도 공식을 알면 쉽습니다. 하지만 문제 해석이 안되면 공식을 알아도 풀지 못하지만...
몇가지 패턴만 익히시면 금방 하실수 있을 겁니다..
질답을 보시다가 좋은 내용이나 아 하시는 내용들은 스크랩을 해 두시면 도움이 됩니다..
저도 help 하고 tip/ 질답 게시판 검색해서 쿼리를 작성합니다...
프로그램에 구현하는 방법 그대로 쿼리나 프호시저로 작성하시면 됩니다.....
with res as (
select 1 idx ,1 구분 ,'20150101' 날짜 ,1000 수량 union all
select 2 ,2 ,'20150101' ,1000 union all
select 4 ,1 ,'20150101' , 500 union all
select 3 ,2 ,'20150102' ,1000 union all
select 5 ,2 ,'20150102' , 700 union all
select 6 ,1 ,'20150102' , 700 ) ,
result as (
select *
, ROW_NUMBER() over (partition by 날짜 , 구분 order by idx ) rno
from res
)
select 날짜
, rno
, sum(case when 구분 = 1 then 수량 end) 구분1수량
, sum(case when 구분 = 2 then 수량 end) 구분2수량
from result
group by 날짜 , rno
order by 날짜 , rno