안녕하세요..
아래와 같은 필드로 구성이 된상태에서
Query 에서 Sum 으로 조건을 줄수 있는 방법을 알고 싶습니다.
Sname cDate Mony Chek
----------------------------------
최진실 | 1998-08-01 | 10,000 | 어음
최수종 | 1998-08-10 | 20,000 | 현금
신해철 | 1998-08-10 | 30,000 | 가계
최진실 | 1998-08-11 | 20,000 | 현금
김현정 | 1998-08-12 | 25,000 | 당좌
최수종 | 1998-08-13 | 30,000 | 당좌
심은하 | 1998-08-13 | 50,000 | 현금
위와 같은 데이타가 있을 때..
1998-08-01 부터 1998-08-13 일 까지 조회를 했다면.
아래와 같은 형태가 나오게 말이죠..
성명 어음 현금 가계 당좌
-------------------------------------------
최진실 10,000 | 20,000 | 0 | 0
최수종 0 | 20,000 | 0 | 30,000
신해철 0 | 0 | 30,000 | 0
김현정 0 | 0 | 0 | 25,000
심은하 0 | 50,000 | 0 | 0
아래와 같은 형태를 했더니.. 비슷하게는 나오는데..
세로로 나오더군요..
Select Sname,Chek,Sum(Mony) From Dbname
Where cDate>='1998-08-01' and cDate<='1998-08-13'
Group By Sname,Chek
계산 항목을 가로로 나오게 할수 없는지요??
위의 문법중에 Sum() 에 조건을 개별적으로 줄수 있다면 딱! 금상첨화인데
조건을 개별적으로 줄수 있는 방법이 없을까요??
그럼.. 미리 감사 드립니다.. ^^;;
> 계산 항목을 가로로 나오게 할수 없는지요??
> 조건을 개별적으로 줄수 있는 방법이 없을까요??
>
이런 경우는 DB에 따라 문법이 다릅니다.
Select Sname,
SQL 이라면
어음 = sum(Case when Chek = '어음' then Mony else 0 end),
현금 = sum(Case when Chek = '현금' then Mony else 0 end),
당좌 = sum(Case when Chek = '당좌' then Mony else 0 end),
가계 = sum(Case when Chek = '가계' then Mony else 0 end)
Oracle 이라면
sum(decode(Chek, '현금', Mony, 0)) 현금
sum(decode(Chek, '어음', Mony, 0)) 어음
sum(decode(Chek, '당좌', Mony, 0)) 당좌
sum(decode(Chek, '가계', Mony, 0)) 가계
From Dbname
Where cDate between '1998-08-01' and '1998-08-13'
Group By Sname
그것도 아니면...
Select a.Sname, b.현금, c.어음, d.가계, e.당좌
From Dbname a,
(select Sname, Sum(Mony) from Dbname where Chek = '현금'
cDate between '1998-08-01' and '1998-08-13' Group By Sname) b,
(select Sname, Sum(Mony) from Dbname where Chek = '어음'
cDate between '1998-08-01' and '1998-08-13' Group By Sname) c,
(select Sname, Sum(Mony) from Dbname where Chek = '가계'
cDate between '1998-08-01' and '1998-08-13' Group By Sname) d,
(select Sname, Sum(Mony) from Dbname where Chek = '당좌'
cDate between '1998-08-01' and '1998-08-13' Group By Sname) e
where
(a.Sname = b.Sname)
and (a.Sname = c.Sname)
and (a.Sname = d.Sname)
and (a.Sname = e.Sname)
조건을 개별적으로 주는 가장 기본적인 방법은 아마 SubQuery가 아닐까합니다..