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 3930 게시물 읽기
No. 3930
쿼리문 좀 부탁드리겠습니다. 2일째 해매고 있네요
작성자
초보자
작성일
2007-12-21 02:51ⓒ
2007-12-21 03:03ⓜ
조회수
3,939

 테이블이 아래와 같이 두개가 있습니다. 

메인테이블

id  월     구분   전월비용
1 2005-01 0
2 2005-02 1000
3 2005-03 2000
4 2005-03 마감 3000

월비용테이블
id  월     입력일 금액
1 2005-01 2005-01-01 1000
2 2005-02 2005-02-01 2000
3 2005-03 2005-03-01 1000
4 2005-03 2005-03-02 2000

위의 두테이블이 있습니다.  메인테이블의 전월비용은 아래의 월비용테이블의 전월 금액의 합을 취득하도록 되어있습니다.
문제는 출력을 원하는 것이 문제네요.

출력결과
월             구분          입력일         금액
2005-01    
2005-02                      2005-01-01    1000
2005-03                      2005-02-01    2000
2005-03      마감          2005-03-01    1000  
2005-03      마감          2005-03-02    2000

으로 출력을 원합니다. 형태는 위와 같지 않아도 됩니다.
기본적으로 메인의 월에서 입력일들은 전월달이 나와야 합니다.
단 메인의 마지막 마감이라는 것은 전월이 있을 수 없기때문에 해당 달의 값이 대상이 됩니다.(2005-03-01 ~~ 2005-03-31)의 월비용리스트
이 마감 부분때문에 머리가 아프네요.

방법이 없을 까요 방법이 없다면 메인테이블의 테이블 구조를 다시 만들어야 할까요 이전 자료가 이렇게 있어
대략 난감이네요 

많은 도움 바랍니다.

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

쿼리 문제 보다는 업무 재정의가 필요한 내용 같네요. 



지나가다가님이 2007-12-21 09:50에 작성한 댓글입니다. Edit

if object_id('메인테이블') is not null
drop table 메인테이블
go

create table 메인테이블
(id int identity(1,1)
, 월 char(7)
, 구분 nvarchar(2)
, 전월비용 int
)

if object_id('월비용테이블') is not null
drop table 월비용테이블
go

create table 월비용테이블
(id int identity(1,1)
, 월 char(7)
, 입력일 char(10)
, 금액 int
)
go

set nocount on
begin tran
insert into 메인테이블 values ('2005-01',null, 0)
insert into 메인테이블 values ('2005-02',null, 1000)
insert into 메인테이블 values ('2005-03',null, 2000)
insert into 메인테이블 values ('2005-03','마감', 3000)

insert into 월비용테이블 values('2005-01', '2005-01-01', 1000)
insert into 월비용테이블 values('2005-02', '2005-02-01', 2000)
insert into 월비용테이블 values('2005-03', '2005-03-01', 1000)
insert into 월비용테이블 values('2005-03', '2005-03-02', 2000)
commit tran
go

select a.월, a.구분, b.입력일, b.금액
from 메인테이블 a
 left outer join 월비용테이블 b
 on dateadd(mm, (case when 구분 = '마감' then 0 else -1 end ) , a.월+'-01') = b.월+'-01'

-- 월       구분   입력일        금액         
-- ------- ---- ---------- -----------
-- 2005-01 NULL NULL       NULL
-- 2005-02 NULL 2005-01-01 1000
-- 2005-03 NULL 2005-02-01 2000
-- 2005-03 마감   2005-03-01 1000
-- 2005-03 마감   2005-03-02 2000

석이님이 2007-12-23 14:48에 작성한 댓글입니다.
이 댓글은 2007-12-23 14:51에 마지막으로 수정되었습니다. Edit

오~~ 대단하십니다.
전 첫번째 댓글보고 포기했었는데
아주 아주 좋은 것을 배웠습니다.
너무 감사합니다.
^^
좋은 2008년 맞이 하시길 바랍니다.
두분다 너무 감사합니다.

초보자님이 2007-12-28 15:11에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3933uniqueidentifier 는 비효율적이지 않습니까? [1]
강훈석
2007-12-23
3569
3932sql2000 사용자인데요.. 자동증가값을 주었을때.. [1]
박남춘
2007-12-21
3173
3931xp home에서 ms sql 설치후 실습하려 하는데요 [1]
후함
2007-12-21
3445
3930쿼리문 좀 부탁드리겠습니다. 2일째 해매고 있네요 [3]
초보자
2007-12-21
3939
3928msslq 자료 내보내기 관련 질문입니다. [3]
초보;
2007-12-20
3675
3927네트워크를 이용하여 다른 서버에 백업을 받을려고 합니다. [1]
서버관리
2007-12-20
3031
3926본문에 해당하는 키워드 찾는 방법 있을까요? [1]
한민우
2007-12-20
3336
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다