database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 1245 게시물 읽기
No. 1245
팀별 SUM 중 한 행으로 처리가 안됩니다.
작성자
박종덕(dadeanbi)
작성일
2004-03-16 21:00ⓒ
2004-03-17 08:57ⓜ
조회수
4,108

안녕하십니까? 항상 도움만 받고 있는 허접한 초보입니다..

아래와 같이 팀별 sum을 구했습니다.

 

SELECT K_DAY,
              case
                 when  k_ch_damteam = '1팀' then SUM(CONVERT(MONEY,k_mk_sum_W)) 
             END as '1팀',
              case
                 when  k_ch_damteam = '2팀' then SUM(CONVERT(MONEY,k_mk_sum_W)) 
             END as '2팀',
              case
                 when  k_ch_damteam = '3팀' then SUM(CONVERT(MONEY,k_mk_sum_W)) 
             END as '3팀'
  from kunjuk
where k_day >= '2003/08/11' and k_day <= '2003/08/20'
group by k_day, k_ch_damteam
order by k_day,k_ch_damteam

 

그런데 결과가

no  날짜             1팀금액    2팀금액    3팀금액

------------------------------------------

1    2000-10-10           10          null          null

2    2000-10-10          null            20         null

3    2000-10-10          null         null            30

...

...

...

22  2000-10-13           20          null          null

23  2000-10-13          null           40          null

24  2000-10-13          null         null            10

 

제가 원하는 결과는

 

no  날짜             1팀금액    2팀금액    3팀금액

------------------------------------------

1    2000-10-10           10            20            30

...

...

...

2    2000-10-13           20            40            10

 

제가 하루 종일 해서 얻어낸 결과는 이렇습니다.

9시가 다된 지금 너무 지치네요

그럼 늦은밤 수고들 하세요

이 글에 대한 댓글이 총 3건 있습니다.

거의 다 하신 듯 하는데요..

그룹핑과 소트에서 k_ch_damteam 만 빼면 될거 같은데요.

 

참고로 좀 더 간략하고 성능상 유리한 문장을 만들어 본다면..

 

SELECT A.K_DAY,
       ISNULL(SUM(case when A.k_ch_damteam = '1팀' then A.MK_SUM END), 0) '1팀',
       ISNULL(SUM(case when A.k_ch_damteam = '2팀' then A.MK_SUM END), 0) '2팀',
       ISNULL(SUM(case when A.k_ch_damteam = '3팀' then A.MK_SUM END), 0) '3팀'
FROM (
      SELECT K_DAY,
             k_ch_damteam,
             CONVERT(MONEY,k_mk_sum_W) MK_SUM
      FRIM kunjuk
      WHERE k_day >= '2003/08/11' and k_day <= '2003/08/20'
      GROUP BY k_day, k_ch_damteam
     ) A
GROUP BY A.k_day
order by A.k_day

 

이렇게 하시면 될 듯..

물론 NULL이 절대 없다면 ISNULL함수는 불필요할 듯...

가객님이 2004-03-17 09:27에 작성한 댓글입니다. Edit

정말 감사합니다. (^^)(__) (^^)(__) (^^)(__)(^^)

님이 보내주신 소스 몇가지 수정하고(오타난거랑 ^^; group by 절에 조건 추가랑요)

원하는 결과를 얻었습니다.

지금의 저로써는 이해하기 조금 어렵지만...

오늘 오전은 분석하는데 시간을 좀 보내야겠습니다.

그럼 이만...

박종덕(dadeanbi)님이 2004-03-17 10:03에 작성한 댓글입니다.

 

컬럼을 피보팅하는 것이네요.

이렇게 하면 더 간단합니다.


SELECT K_DAY,
 sum(case k_ch_damteam when '1팀' then k_mk_sum_W else 0 end) as "1팀",
 sum(case k_ch_damteam when '2팀' then k_mk_sum_W else 0 end) as "2팀",
 sum(case k_ch_damteam when '3팀' then k_mk_sum_W else 0 end) as "3팀"
from kunjuk
where k_day between '2003/08/11' and '2003/08/20'
group by k_day
order by k_day

 

장형운(좋은구름)님이 2004-03-22 13:09에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
1248성공적으로 인서트 되었는지를 알 수 있는... [1]
초보
2004-03-17
3313
1247이것좀 봐주실수 있으실런지요? [1]
초보
2004-03-17
4665
1246[질문]999를 0000999 로 바꾸려면 어떻게 해야 하나여? [1]
최재영
2004-03-17
3929
1245팀별 SUM 중 한 행으로 처리가 안됩니다. [3]
박종덕
2004-03-16
4108
1244zeos를 사용 Delphi로 mssql연결작업시...
수니
2004-03-16
4090
1242MS SQL과 C 언어를 연동하려면...고수님들 부탁여... [1]
권순주
2004-03-15
4339
1241아무리 찾아봐도 모르겠네요...고수님들..제발 부탁여... [1]
권순주
2004-03-15
4494
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다