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 1781 게시물 읽기
No. 1781
group by count
작성자
초보자
작성일
2005-02-17 10:58
조회수
3,812

SELECT TA.card_com,convert(varchar(8), getdate(), 112) wr_date, case when right(acq_date,1)%2 = 1 then 1 else 2 end, TA.mcht_no, TA.acq_date, TM.mcht_busnno, count(*) ask_cnt, sum(TA.auth_amt) ask_amt
, 0, 0, 0, 0, 0, 0, count(*) total_cnt, sum(TA.auth_amt) total_amt, convert(int,(sum(TA.auth_amt)*isnull(TCC.card_fee,0)/100)) total_fee
, convert(varchar(8), getdate(), 112), sum(TA.auth_amt) - convert(int,(sum(TA.auth_amt)*isnull(TCC.card_fee,0)/100)) rcp_amt, TM.bc_acct_no setl_acct
FROM tbtr_aqui TA
, (SELECT * FROM tbmer_merchant WHERE st = 'Y') TM
, (SELECT * FROM tbmer_card_com WHERE card_com IN ('0100' , '01')) TCC
, (SELECT min(sun_calendar) sun_calendar FROM (SELECT TOP 2 sun_calendar FROM tbcalendar WHERE sun_calendar < convert(varchar(8), getdate(), 112) AND holiday = '2' ORDER BY sun_calendar DESC) DT) TDT
, (SELECT min(sun_calendar) sun_calendar FROM (SELECT TOP 2 sun_calendar FROM tbcalendar WHERE sun_calendar < convert(varchar(8), getdate(), 112) AND holiday = '2' ORDER BY sun_calendar DESC) DT) DTD
WHERE TA.card_com IN ('0100' , '01')
AND acq_date BETWEEN TDT.sun_calendar and DTD.sun_calendar
AND TA.terminal_id = TM.terminal_id
AND TA.busn_no = TM.mcht_busnno
AND TM.terminal_id = TCC.terminal_id
AND TM.mcht_busnno = TCC.mcht_busnno
AND TM.van_code = TCC.van_code
GROUP BY TA.card_com, TA.mcht_no, TM.mcht_busnno, TA.acq_date, TM.bc_acct_no, TCC.card_fee

 

이쿼리에서 group by 된 컬럼기준으로 결과값이 1개의 row씩 나와야하는데 2개이상씩 나오는경우가 있습니다. 2개이상씩 나오는경우만 찾아볼수 있는 쿼리를 만들고 싶은데 잘안되네요.. having 을 써봤지만 힘드네요.. 도움 부탁드립니다...

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

단지 having count(*) > 1 만 붙여주면 될 거 같은데요..

 

조금 이해가 안가는 건..

 acq_date BETWEEN TDT.sun_calendar and DTD.sun_calendar

이게 무슨 의미인지..

위쪽에 보면 TDT.sun_calendar와 DTD.sun_calendar는 같은 값이 거든요.

 

글구

FROM tbtr_aqui TA
    ,(SELECT *
      FROM tbmer_merchant
      WHERE st = 'Y'
      ) TM
    ,(SELECT *
      FROM tbmer_card_com
      WHERE card_com IN ('0100' , '01')
      ) TCC

이런 표현은 혼란만 가중시킵니다.

 

그냥 조인하는 것이 표현상 명확합니다.

아래처럼 말이죠..

FROM tbtr_aqui TA
         ,tbmer_merchant TM
         ,tbmer_card_com TCC

WHERE TM.st = 'Y'
AND TCC.card_com IN ('0100' , '01')

조인조건..
..

..

물론 위쪽처럼 써도 수행상은 아무런 차이가 없습니다.

다만 보기가 나쁘다는 거지요..

 

초보자라고 쓰셨길래..

노파심에 불필요할 수 있는 글도 덧붙였습니다. ^^

즐겁게 일하시길..

mur님이 2005-02-18 09:58에 작성한 댓글입니다.
이 댓글은 2005-02-18 10:02에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1784메모리 DB에 대한 문의 - 꼭 답변 주세요... [4]
복팅이
2005-02-18
4639
1783[질문]sql analyzer에서 자동 접속 [3]
솔이아빠
2005-02-17
2830
1782[쿼리 질문] 최고 점수의 과목 찾기 [2]
소병민
2005-02-17
7111
1781group by count [1]
초보자
2005-02-17
3812
1780[질문]데이터베이스에서 사용하는 스토어 프로시져의 목록들 가져오기 [3]
솔이아빠
2005-02-16
3908
1779마이sql에서 MsSql로의 변환 [2]
박준희
2005-02-15
2894
1778서버 매니저에서 복구시 오류가 납니다. 도대체 이유가 뭘까요??
최정우
2005-02-15
2438
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다