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
운영게시판
최근게시물
MySQL Q&A 30011 게시물 읽기
No. 30011
다중 테이블 select 구문
작성자
노인철
작성일
2011-06-15 22:46
조회수
8,319

우선 Table이 2개 있습니다.

 

TableA : 고유 ID와 수수료 가 저장됩니다. Table A와 TableB 의 연결 인자는 id 입니다.

id                   charge

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

1                           10

2                            20

3                            30

4                             5

 

TableB

id               input_id       accept_id

1                          A                      B

2                         A                       C

3                          B                     C

4                          D                     A

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

* Input_id 는 거래를 올리는 ID 이고, acceipt_id는 거래를 받는 ID입니다.

상호 거래를 올리기도 하고 받을 수도 있습니다.

상기 테이블에서 추출하고 하는 것은 TableB의 input_id 를 기준으로 자신이 올린 거래 수수료(tableA) 합계와, 자신이 수락한 거래에 대한

수수료 합계를 보고 싶습니다.

 

희망 결과 값

id            input_charge      output_charge   in_out_gap

A                    30                            5                      25

B                     30                         10                     20

C                                                   50                   -50

D                    5                                                       5

 

어떻게 하면 위와 같이 원하는 값을 얻을 수 있을까요?

고수님 부탁드립니다.

 

감사합니다.

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

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

 

/*
EXEC USP_RESTAA0
 @id     = '1',
 @input_charge  = '2',
 @output_charge  = '3',
 @in_out_gap   = '4'
*/


ALTER PROCEDURE [dbo].[USP_RESTAA0]
(  
@id   VARCHAR(10)  = NULL,
@input_charge  VARCHAR(10)  = NULL,
@output_charge  VARCHAR(10)  = NULL,
@in_out_gap  VARCHAR(10)  = NULL
) AS

DECLARE  @B_id  INT      -- B_table 쉬컨스 갯수
SET  @B_id = 0

CREATE TABLE #B_TEMP
 ( 
  flag NUMERIC(2,0) DEFAULT(0),
  id  NUMERIC(18, 0) DEFAULT(0),
  put_id VARCHAR(10) DEFAULT NULL
 )


CREATE TABLE #A_TEMP
 ( 
  flag NUMERIC(2,0) DEFAULT(0),
  id  VARCHAR(10) DEFAULT NULL,
  charge  NUMERIC(10) DEFAULT(0)
 )

CREATE TABLE #TEMP
 ( 
  id  VARCHAR(10) DEFAULT NULL,
  input_charge  NUMERIC(18, 0) DEFAULT(0) ,
  output_charge  NUMERIC(18, 0) DEFAULT(0),
  in_out_gap  NUMERIC(18, 0) DEFAULT(0) ,
 )


CREATE TABLE #TOTAL_TEMP
 ( 
  id  VARCHAR(10) DEFAULT NULL,
  input_charge  NUMERIC(18, 0) DEFAULT(0) ,
  output_charge  NUMERIC(18, 0) DEFAULT(0),
  in_out_gap  NUMERIC(18, 0) DEFAULT(0) ,
 )

 

begin
 --select * From SET_B  5는 최종갯수
 WHILE ( @B_id <= 5)
 BEGIN
  SET @B_id = @B_id +1  -- INPUT_ID
   INSERT INTO #B_TEMP select 0 As Flag, B.id As id , B.INPUT_ID As put_id From SET_B As B Where B.id = @B_id
 END

 SET @B_id = 0

 WHILE ( @B_id <= 5)
 BEGIN
  SET @B_id = @B_id +1 -- ACCETP_ID
   INSERT INTO #B_TEMP select 1 As Flag, B.id As id , B.ACCETP_ID As put_id From SET_B As B Where B.id = @B_id
 END


end

begin
 INSERT INTO #A_TEMP select  flag, put_Id, charge As charge from #B_TEMP AS B INNER JOIN SET_A As A ON A.id = B.id group by B.flag , B.put_ID, charge
end

INSERT INTO #TEMP
  select A.id,
   (CASE WHEN Flag=0 then A.Charge else 0 end) As input_charge,   
   (CASE WHEN Flag=1 then A.Charge else 0 end) As output_charge,
  0 as in_out_gap 

     from #A_TEMP As A group by A.flag, A.Id, A.Charge

INSERT INTO #TOTAL_TEMP
  select id,
      SUM(input_charge) As input_charge,
               SUM(output_charge) As output_charge,
      0 as in_out_gap 
  from #TEMP group by id


select id, input_charge, output_charge,
  input_charge - output_charge As in_out_gap
from #TOTAL_TEMP AS T

 

DROP TABLE #B_TEMP
DROP TABLE #A_TEMP
DROP TABLE #TEMP
DROP TABLE #TOTAL_TEMP

붉은시원(red10won)님이 2011-07-05 16:56에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
30014RAISE_APPLICATION_ERROR 기능문의
박세정
2011-06-23
7141
30013/mysql: 인수 명단이 너무 김 [1]
김승철
2011-06-17
7487
30012mysql의 InnoDB의 row level 락킹 관련 질문입니다.
정수화
2011-06-16
8806
30011다중 테이블 select 구문 [1]
노인철
2011-06-15
8319
30010다중 row 를 하나의 row로 가져 오려면 [2]
다중열
2011-06-15
7930
30008db에서 뽑아온 자료의 정렬문제입니다. [1]
조근호
2011-06-12
8012
30007mysql 설치 후 디렉토리 변경해서 시작하면 에러가 발생 합니다. [2]
김영범
2011-06-12
8839
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다