안녕하세요.
쿼리를 짜는데 잘 생각이 그려지지가 않아서 질문 드립니다.
A TABLE 에 아래와 같이 DATA가 있습니다.
-----------------------------------------------------------------
country | code | sdcode | price |
-----------------------------------------------------------------
KO | 1234 | A1234 | 10000 |
KO | 1234 | B1234 | 1000 |
KO | 2345 | A1234 | 5000 |
KO | 2345 | B1234 | 500 |
위의 내용을
-----------------------------------------------------------------
country | code | Aprice | Bprice
-----------------------------------------------------------------
KO | 1234 | 10000 | 1000 |
KO | 2345 | 5000 | 500 |
이런식으로 가져오고 싶습니다.
현재는 서브쿼리를 써서 가져오고는 있는데 속도가 많이 느려서
혹시 다른 방법이 있는지 알고 싶습니다.(피벗을 생각하는데 그려지지가 않네요.)
답변 주시면 감사하겠습니다.
Comment 3
-
건우아빠
2017.01.12 16:44
awith res as(select 'KO' country , '1234' code , 'A1234' sdcode , 10000 price union allselect 'KO' , '1234' , 'B1234' , 1000 union allselect 'KO' , '2345' , 'A1234' , 5000 union allselect 'KO' , '2345' , 'B1234' , 500)select country, code, max(case when LEFT(sdcode,1) = 'A' then price end ) Aprice, max(case when LEFT(sdcode,1) = 'B' then price end ) Bpricefrom resgroup by country , code -
고구마밥
2017.01.12 18:04
PIVOT을 사용한다면 아래와 같지 않을까(?) 합니다~ ^^;
with A_TBL
as
(
select 'KO' as country, '1234' as code, 'A1234' as sdcode, 10000 as price union all
select 'KO', '1234', 'B1234', 1000 union all
select 'KO', '2345', 'A1234', 5000 union all
select 'KO', '2345', 'B1234', 500
)
select country, code, sum(Aprice) as Aprice, sum(Bprice) as Bprice
from (
select country, code, sdcode, case Left(sdcode, 1) when 'A' then 'Aprice' when 'B' then 'Bprice' else '' end as sdtype , sum(price) as total
from A_TBL
group by country, code, sdcode
) as A
pivot (
sum(A.total) for sdtype in ([Aprice], [Bprice])
) as B
group by country, code -
sunnywin
2017.01.31 16:53
답변이 늦었습니다.
새해 복 많이 받으시고 감사합니다~ ^^