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 6940 게시물 읽기
No. 6940
master - detail 연결시 합계금액
작성자
김우성(babokws)
작성일
2015-11-30 21:24
조회수
2,535

master detail

junno money junno money

2015-11-0630006 40100 2015-11-0630006 40100

2015-11-0630008 38100 2015-11-0630006 40100

2015-11-0630004 37100 2015-11-0630006 40100

2015-11-0530003 36000 2015-11-0630008 38100

2015-11-0530005 35100 2015-11-0630008 38100

합계 186400 2015-11-0630004 37100

2015-11-0630004 37100

2015-11-0630004 37100

2015-11-0630004 37100

2015-11-0530003 36000

2015-11-0530005 35100

2015-11-0530005 35100

합계 451100

 

select sum(money) from detail as d inner join master as m on d.junno = m.junno

 

186400원이 나와야되는데 451100이 나오네요 186400원이 나오게 하려면 어떻게 해야되나요?

 

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

Detail 에 대한 조인이 필요 없어 보이는데요???
Master 만 가지고 합계 구해 보세요.

마농(manon94)님이 2015-12-01 09:56에 작성한 댓글입니다.

outm_1511

junno totenddc

2015-11-0630006 40100

2015-11-0630008 38100

2015-11-0630004 37100

2015-11-0530003 36000

2015-11-0530005 35100

합계 186400

 

outd_1511

junno comcode

2015-11-0630006 10001

2015-11-0630006 10001

2015-11-0630006 10001

2015-11-0630008 10002

2015-11-0630008 10002

2015-11-0630004 10003

2015-11-0630004 10003

2015-11-0630004 10003

2015-11-0630004 10003

2015-11-0530003 10004

2015-11-0530005 10005

2015-11-0530005 10005

 

comp

comcode comname

10001 가야

10002 한솔

10003 덕포

 

SELECT icomcode AS 코드

, CASE GROUPING(icomcode) WHEN 1

THEN '합계' ELSE MIN(comname) END AS 거래처명

 

, SUM(에누리할인) AS 에누리할인

 

FROM (SELECT x.icomcode

, c.comname

, x.isvat

 

-- 에누리할인은 (outm_1511 테이블의 totenddc 합계이고 금액은 209180 입니다 totenddc 는 outm_1511에만 존재합니다)

-- outd_1511 과 comp 와 outm_1511 세개의 테이블을 조인하고싶어요

, (m.totenddc) AS 에누리할인

 

FROM outd_1511 AS x

 

INNER JOIN comp AS c ON x.icomcode = c.comcode

INNER JOIN outm_1511 AS m ON m.junno = x.junno

 

AND x.day1 >= '2015-11-01'

AND x.day1 <= '2015-11-15'

LEFT OUTER JOIN outm_1511 AS u ON u.junno = x.junno

) a

GROUP BY icomcode

WITH ROLLUP

김우성님이 2015-12-01 23:33에 작성한 댓글입니다.
이 댓글은 2015-12-01 23:44에 마지막으로 수정되었습니다. Edit

SELECT c.comcode AS 코드
     , CASE GROUPING(c.comcode) WHEN 1 THEN '합계'
            ELSE MIN(c.comname) END AS 거래처명
     , SUM(m.totenddc) AS 에누리할인
  FROM (SELECT DISTINCT junno, icomcode
          FROM outd_1511
         WHERE day1 >= '2015-11-01'
           AND day1 <= '2015-11-15'
        ) x
 INNER JOIN comp c
    ON x.icomcode = c.comcode
 INNER JOIN outm_1511 m
    ON x.junno = m.junno
 GROUP BY c.comcode
 WITH ROLLUP
;

마농(manon94)님이 2015-12-02 09:40에 작성한 댓글입니다.
이 댓글은 2015-12-02 09:45에 마지막으로 수정되었습니다.

죄송합니다 알아보기쉬우라고 간략히 했는데 원래는 이 쿼리문인데 에누리할인값이 넘 많이 나와요

SELECT icomcode AS 거래처코드

, CASE GROUPING(icomcode) WHEN 1

THEN '합계' ELSE MIN(comname) END AS 거래처명

, SUM(판매) AS 판매

, SUM(반품) AS 반품

 

, SUM(에누리할인) AS 에누리할인

 

, SUM(순매출) AS 순매출

, SUM(매출원가) AS 매출원가

, SUM(카드매출) AS 카드매출

, SUM(카드과세) AS 카드과세

, SUM(카드면세) AS 카드면세

, SUM(hyungum) AS 현금매출

, SUM(CASE isvat WHEN '1' THEN hyungum END) AS 현금과세

, SUM(CASE isvat WHEN '0' THEN hyungum END) AS 현금면세

FROM (SELECT x.icomcode

, c.comname

, x.isvat

, (x.tmamoney1 - x.tbamoney1) - (x.cardvat1 + x.cardvat0) AS hyungum

, ((x.tmamoney1+x.tmoneydc) * x.mb) AS 판매

, (x.tbamoney1) AS 반품

 

, (u.totenddc) AS 에누리할인

 

, (x.tmamoney1 - x.tbamoney1) AS 순매출

, (x.tmoney0vat * x.mb) AS 매출원가

, (x.cardvat1 + x.cardvat0) AS 카드매출

, (x.cardvat1) AS 카드과세

, (x.cardvat0) AS 카드면세

, ((x.tmamoney1 - x.tbamoney1) - (x.cardvat1 + x.cardvat0)) AS 현금매출

FROM outd_1511 AS x

 

INNER JOIN comp AS c ON x.icomcode = c.comcode

INNER JOIN outm_1511 AS m ON m.junno = x.junno

 

AND x.day1 >= '2015-11-01'

AND x.day1 <= '2015-11-15'

LEFT OUTER JOIN outm_1511 AS u ON u.junno = x.junno

) a

GROUP BY icomcode

WITH ROLLUP

김우성(babokws)님이 2015-12-02 19:03에 작성한 댓글입니다.

사소한거 하나에 쿼리는 180도 달라질 수 있습니다.

질문하실때 단순화해서 질문하시면 답변도 단순할수밖에 없습니다.

 

단계별로 2번 그룹바이 하셔야 할 듯 하네요.

SELECT comcode AS 거래처코드
     , CASE GROUPING(comcode) WHEN 1
            THEN '합계' ELSE MIN(comname) END AS 거래처명
     , SUM(판매    ) AS 판매
     , SUM(반품    ) AS 반품
     , SUM(totenddc) AS 에누리할인
     , SUM(순매출  ) AS 순매출
     , SUM(매출원가) AS 매출원가
     , SUM(카드매출) AS 카드매출
     , SUM(카드과세) AS 카드과세
     , SUM(카드면세) AS 카드면세
     , SUM(현금매출) AS 현금매출
     , SUM(현금과세) AS 현금과세
     , SUM(현금면세) AS 현금면세
  FROM (SELECT c.comcode
             , c.comname
             , u.totenddc
             , SUM((x.tmamoney1 + x.tmoneydc) * x.mb)    AS 판매
             , SUM(x.tbamoney1)                          AS 반품
             , SUM(x.tmamoney1  - x.tbamoney1)           AS 순매출
             , SUM(x.tmoney0vat * x.mb)                  AS 매출원가
             , SUM(x.cardvat1   + x.cardvat0)            AS 카드매출
             , SUM(x.cardvat1)                           AS 카드과세
             , SUM(x.cardvat0)                           AS 카드면세
             , SUM( (x.tmamoney1 - x.tbamoney1)
                  - (x.cardvat1  + x.cardvat0 ) )        AS 현금매출
             , SUM(CASE x.isvat WHEN '1'
                   THEN (x.tmamoney1 - x.tbamoney1)
                      - (x.cardvat1  + x.cardvat0 ) END) AS 현금과세
             , SUM(CASE x.isvat WHEN '0'
                   THEN (x.tmamoney1 - x.tbamoney1)
                      - (x.cardvat1  + x.cardvat0 ) END) AS 현금면세
          FROM outd_1511 x
         INNER JOIN comp c
            ON x.icomcode = c.comcode
          LEFT OUTER JOIN outm_1511 u
            ON x.junno = u.junno
         WHERE x.day1 >= '2015-11-01'
           AND x.day1 <= '2015-11-15'
         GROUP BY c.comcode, c.comname, u.totenddc
        ) a
 GROUP BY comcode
 WITH ROLLUP
;

마농(manon94)님이 2015-12-03 10:14에 작성한 댓글입니다.
이 댓글은 2015-12-03 10:16에 마지막으로 수정되었습니다.

네, 죄송합니다 참고하도록하겠습니다

그런데 중복값이 좀 있어요 어케빼야될지 넘어렵네요

중간에 X 표시된것들이 빼야 될것들입니다 화면은 정렬이 안되네요 보기가영...

 

쿼리결과값 중복된것 나와야될값

00003 2015-11-0630006 40100 2015-11-0630006 40100

10099 2015-11-0630006 40100 X 2015-11-0630008 38100

00003 2015-11-0630008 38100 2015-11-0630004 37100

10099 2015-11-0630008 38100 X 2015-11-0530003 36000

00003 2015-11-0630004 37100 2015-11-0530005 35100

10099 2015-11-0630004 37100 X 2015-11-0630002 35100

00003 2015-11-0530003 36000 2015-11-1130003 24750

00003 2015-11-0530005 35100 2015-11-1030006 23400

00003 2015-11-0630002 35100 2015-11-0430009 15150

00003 2015-11-1130003 24750 2015-11-0330006 13350

00003 2015-11-1030006 23400 2015-11-0430004 9510

10099 2015-11-1030006 23400 X 2015-11-0430001 9510

00003 2015-11-0430009 15150 2015-11-0630009 9290

00003 2015-11-0330006 13350 2015-11-1030005 8550

00003 2015-11-0430001 9510 2015-11-0430005 8500

00003 2015-11-0430004 9510 2015-11-0430002 7920

00003 2015-11-0630009 9290 2015-11-0530001 7910

00003 2015-11-1030005 8550 2015-11-1030004 7910

00003 2015-11-0430005 8500 2015-11-0630012 6230

00003 2015-11-0430002 7920 2015-11-1230002 5640

00003 2015-11-0530001 7910 2015-11-0330005 4520

00003 2015-11-1030004 7910 2015-11-0230002 3860

00003 2015-11-0630012 6230 2015-11-0230004 3300

10099 2015-11-0630012 6230 X

00003 2015-11-1230002 5640

00003 2015-11-0330005 4520

00003 2015-11-0230002 3860

00003 2015-11-0230004 3300

535,730 144,930 390,800

합계 중복합계 나와야될합계

 

 

김우성님이 2015-12-03 19:04에 작성한 댓글입니다.
이 댓글은 2015-12-03 19:18에 마지막으로 수정되었습니다. Edit

역시나...

질문을 많이 잘라먹고 하셨네요.

어떤 쿼리를 사용했는지?

결과를 봤을 땐 그룹바이 항목에 불필요한 항목이 포함된듯 보이네요.

결과의 첫번째 항목.

 

마농(manon94)님이 2015-12-03 22:01에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6944update 문장 [1]
멍멍이
2015-12-18
2317
6942MS-SQl -> 오라클 접속시 오류
학습자
2015-12-11
2295
6941mssql update 관련 궁금증이 있습니다.
박주호
2015-12-08
2167
6940master - detail 연결시 합계금액 [7]
김우성
2015-11-30
2535
6939ms sql where in () 조건시 in절안에 파라메타 최대 개수가 궁금합니다. [1]
jd
2015-11-27
3395
6938산술오버플로 오류입니다. [2]
둥둥이
2015-11-26
2793
6937문자열 추출 [2]
쿠기
2015-11-24
2301
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.120초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다