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 4123 게시물 읽기
No. 4123
매입,매출 비교 쿼리 질문드립니다.
작성자
나그네
작성일
2008-03-19 11:44ⓒ
2008-03-19 11:46ⓜ
조회수
7,673

테이블 : 부서(A), 매입(B), 매출(C)


부서TAble : 부서코드, 부서명


매입Table : 매입코드, 매입가, 매입부서코드, 매입일


매출Table : 매출코드, 매출가, 매출부서코드, 매출일


이렇게 세개의 테이블을 조합해서


결과물을 얻고자 합니다.


결과물에는 부서의 매입,매출 차액이 포함되어야 합니다.


결과물의 폼은



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

부서명            |     1월  | 2월 | 3월 | ...................... 12월

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

A부서(매입)

A부서(매출)

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

.

.

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

매입합계  

매출합계

차액




위와 같은 결과를 얻고자 합니다.


어떻게 쿼리를 짜야할지 감이 잡히지 않는데 조언 부탁드리겠습니다.


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

각각의 DDL과 DML(INSERT)를 주면 쿼리하는데 도움이 될듯한데요. 

.님이 2008-03-19 12:25에 작성한 댓글입니다. Edit

답변 감사합니다.


아직 초보라 그런데 좀 구체적으로 설명 부탁드려도 될까요?

나그네님이 2008-03-19 12:31에 작성한 댓글입니다. Edit

답변이 아니었구요.. 
table작성 구문과 샘플데이터를 달라는 거예요. 

source가 있어야 쿼리를 짤수 있지 않을까요 ^^

.님이 2008-03-19 13:05에 작성한 댓글입니다. Edit
잘못올렸네요 다시 올립니다.


-- 부서테이블
CREATE TABLE [dbo].[Team](
 [B_code] [int] IDENTITY(10000,1) NOT NULL,
 [B_name] [varchar](100) NULL,
 CONSTRAINT [PK_Team] PRIMARY KEY CLUSTERED
(
 [B_code] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


-- 매입 테이블

CREATE TABLE [dbo].[MaeIp](
 [I_code] [int] IDENTITY(10000,1) NOT NULL,
 [price] [decimal](18, 1) NOT NULL,
 [B_code] [int] NOT NULL,
 [I_date] [datetime] NOT NULL,
 CONSTRAINT [PK_MaeIp] PRIMARY KEY CLUSTERED
(
 [I_code] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

-- 매출테이블

CREATE TABLE [dbo].[Maechul](
 [O_code] [int] IDENTITY(10000,1) NOT NULL,
 [price] [decimal](18, 1) NOT NULL,
 [B_code] [int] NOT NULL,
 [O_date] [datetime] NOT NULL,
 CONSTRAINT [PK_Maechul] PRIMARY KEY CLUSTERED
(
 [O_code] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]



-- 부서테이블 입력

INSERT INTO [testDb].[dbo].[Team]
           ([B_name])
     VALUES
           ('개발부')

INSERT INTO [testDb].[dbo].[Team]
           ([B_name])
     VALUES
           ('총무부')

INSERT INTO [testDb].[dbo].[Team]
           ([B_name])
     VALUES
           ('영업부')


-- 매입테이블 입력

INSERT INTO [testDb].[dbo].[MaeIp]
           ([price]
           ,[B_code]
           ,[I_date])
     VALUES
           (120000.0
           ,10000
           ,2008-01-02)

INSERT INTO [testDb].[dbo].[MaeIp]
           ([price]
           ,[B_code]
           ,[I_date])
     VALUES
           (132000.0
           ,10001
           ,2008-02-02)

INSERT INTO [testDb].[dbo].[MaeIp]
           ([price]
           ,[B_code]
           ,[I_date])
     VALUES
           (131000.0
           ,10002
           ,2008-03-02)

INSERT INTO [testDb].[dbo].[MaeIp]
           ([price]
           ,[B_code]
           ,[I_date])
     VALUES
           (230000.0
           ,10001
           ,2008-01-02)

INSERT INTO [testDb].[dbo].[MaeIp]
           ([price]
           ,[B_code]
           ,[I_date])
     VALUES
           (120000.0
           ,10000
           ,2008-03-02)

 

 -- 매출 테이블 입력

INSERT INTO [testDb].[dbo].[Maechul]
           ([price]
           ,[B_code]
           ,[O_date])
     VALUES
           (120000.0
           ,10000
           ,2008-01-02)

INSERT INTO [testDb].[dbo].[Maechul]
           ([price]
           ,[B_code]
           ,[O_date])
     VALUES
           (132000.0
           ,10001
           ,2008-02-02)

INSERT INTO [testDb].[dbo].[Maechul]
           ([price]
           ,[B_code]
           ,[O_date])
     VALUES
           (131000.0
           ,10002
           ,2008-03-02)

INSERT INTO [testDb].[dbo].[Maechul]
           ([price]
           ,[B_code]
           ,[O_date])
     VALUES
           (230000.0
           ,10001
           ,2008-01-02)

INSERT INTO [testDb].[dbo].[Maechul]
           ([price]
           ,[B_code]
           ,[O_date])
     VALUES
           (120000.0
           ,10000
           ,2008-03-02)


테이블 생성과 데이터 입력 쿼리 입니다.




나그네님이 2008-03-19 13:20에 작성한 댓글입니다.
이 댓글은 2008-03-19 14:36에 마지막으로 수정되었습니다. Edit

차액은 조금 힘이 드네요. 
데이터 입력도 에러가 나고 해서 우선 넣고 대강 해봤습니다.


SELECT B_NAME
 , [1월]
 , [2월]
 , [3월]
 , [4월]
 , [5월]
 , [6월]
 , [7월]
 , [8월]
 , [9월]
 , [10월]
 , [11월]
 , [12월]
FROM (
 SELECT
   B_NAME = CASE WHEN B_NAME IS NULL  THEN '매입합계' ELSE B_NAME + '(매입)' END
  , [1월]
  , [2월]
  , [3월]
  , [4월]
  , [5월]
  , [6월]
  , [7월]
  , [8월]
  , [9월]
  , [10월]
  , [11월]
  , [12월]
  , ORDER_COL = ISNULL(Z.B_CODE, 999999999)
 FROM
  TEAM Y
  RIGHT OUTER JOIN
  (
   SELECT
      B_CODE
    , [1월]  = SUM(CASE WHEN I_DATE = 1  THEN IP ELSE 0 END)
    , [2월]  = SUM(CASE WHEN I_DATE = 2  THEN IP ELSE 0 END)
    , [3월]  = SUM(CASE WHEN I_DATE = 3  THEN IP ELSE 0 END)
    , [4월]  = SUM(CASE WHEN I_DATE = 4  THEN IP ELSE 0 END)
    , [5월]  = SUM(CASE WHEN I_DATE = 5  THEN IP ELSE 0 END)
    , [6월]  = SUM(CASE WHEN I_DATE = 6  THEN IP ELSE 0 END)
    , [7월]  = SUM(CASE WHEN I_DATE = 7  THEN IP ELSE 0 END)
    , [8월]  = SUM(CASE WHEN I_DATE = 8  THEN IP ELSE 0 END)
    , [9월]  = SUM(CASE WHEN I_DATE = 9  THEN IP ELSE 0 END)
    , [10월] = SUM(CASE WHEN I_DATE = 10 THEN IP ELSE 0 END)
    , [11월] = SUM(CASE WHEN I_DATE = 11 THEN IP ELSE 0 END)
    , [12월] = SUM(CASE WHEN I_DATE = 12 THEN IP ELSE 0 END)
   FROM
   (
   SELECT
    A.B_NAME
    , I_DATE = DATEPART(MM, B.I_DATE)
    , IP = B.PRICE
    , A.B_CODE
   FROM
    TEAM A
    INNER JOIN MAEIP B
     ON A.B_CODE = B.B_CODE ) X
   GROUP BY B_CODE
   WITH ROLLUP
  ) Z
  ON Y.B_CODE = Z.B_CODE
 UNION ALL
 SELECT
   B_NAME = CASE WHEN B_NAME IS NULL  THEN '매출합계' ELSE B_NAME + '(매출)' END
  , [1월]
  , [2월]
  , [3월]
  , [4월]
  , [5월]
  , [6월]
  , [7월]
  , [8월]
  , [9월]
  , [10월]
  , [11월]
  , [12월]
  , ORDER_COL = ISNULL(Z.B_CODE, 999999999)
 FROM
  TEAM Y
  RIGHT OUTER JOIN
  (
   SELECT
      B_CODE
    , [1월]  = SUM(CASE WHEN O_DATE = 1  THEN OP ELSE 0 END)
    , [2월]  = SUM(CASE WHEN O_DATE = 2  THEN OP ELSE 0 END)
    , [3월]  = SUM(CASE WHEN O_DATE = 3  THEN OP ELSE 0 END)
    , [4월]  = SUM(CASE WHEN O_DATE = 4  THEN OP ELSE 0 END)
    , [5월]  = SUM(CASE WHEN O_DATE = 5  THEN OP ELSE 0 END)
    , [6월]  = SUM(CASE WHEN O_DATE = 6  THEN OP ELSE 0 END)
    , [7월]  = SUM(CASE WHEN O_DATE = 7  THEN OP ELSE 0 END)
    , [8월]  = SUM(CASE WHEN O_DATE = 8  THEN OP ELSE 0 END)
    , [9월]  = SUM(CASE WHEN O_DATE = 9  THEN OP ELSE 0 END)
    , [10월] = SUM(CASE WHEN O_DATE = 10 THEN OP ELSE 0 END)
    , [11월] = SUM(CASE WHEN O_DATE = 11 THEN OP ELSE 0 END)
    , [12월] = SUM(CASE WHEN O_DATE = 12 THEN OP ELSE 0 END)
   FROM
   (
   SELECT
    A.B_NAME
    , O_DATE = DATEPART(MM, B.O_DATE)
    , OP = B.PRICE
    , A.B_CODE
   FROM
    TEAM A
    INNER JOIN MAECHUL B
     ON A.B_CODE = B.B_CODE ) X
   GROUP BY B_CODE
   WITH ROLLUP
  ) Z
  ON Y.B_CODE = Z.B_CODE
 
) K
ORDER BY ORDER_COL, B_NAME


.님이 2008-03-19 14:32에 작성한 댓글입니다. Edit

답변 정말 감사합니다.


그런데 매입테이블에 부서코드가 있고


매출테이블에 부서코드가 없을 시에는


매입정보밖에 나오지 않는데


매출정보에 0으로 표시할려면 어떻게 하나요?



결과물을 보여드리자면


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

부서                  |  1월     |  2월  | ...............................| 12월|

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

A거래처(매입)    |  200,00 |

A거래처(매출)    |         0 |

.

.

.

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

매입합계

매출합계

차액



위와 같이 결과물을 만들고자 한다면요?


송구스럽지만 부탁드립니다.

나그네님이 2008-03-19 15:03에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
4126네트워크에 관해서 질문 드립니다.
정명규
2008-03-20
3695
4125sql접속 문자열에 대해 설명 좀 부탁드립니다.
손님
2008-03-19
3582
4124sql서버를 두대 연결해서 쓰고 있습니다.
정명규
2008-03-19
3506
4123매입,매출 비교 쿼리 질문드립니다. [6]
나그네
2008-03-19
7673
4122오라클 게시판에서도 올렸지만 [3]
짠심이
2008-03-18
3677
4121쿼리문이 저장된 파일을 실행 [1]
최자영
2008-03-17
4127
4120show error 시에요..^^;;
김희정
2008-03-17
3952
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다