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 6932 게시물 읽기
No. 6932
ms sql 선수수익 문제 질문합니다!
작성자
황유진(dbwlsdl5796)
작성일
2015-11-17 21:52
조회수
2,369

--drop table #temp

create table #temp(

id varchar(20)

, begin_dt date

, end_dt date

)

 

 

insert #temp values('user1', '20050615', '20050805')

insert #temp values('user2', '20050515', '20050605')

insert #temp values('user3', '20060101', '20060601')

insert #temp values('user4', '20070513', '20070730')

 

 

 

 

id begin_dt end_dt

user1 2005-06-15 2005-08-05

user2 2005-05-15 2005-06-05

user3 2006-01-01 2006-06-01

user4 2007-05-13 2007-07-30

 

 

위의 테이블을 이용해서 아래테이블을 만들어야 하는데 쿼리를 어떻게 짜야할지 모르겠어요 ㅠ

 

 

id 시작일 종료일 결제 적용

user1 2005-06-15 2005-06-30 6 6

user1 2005-07-01 2005-07-31 6 7

user1 2005-08-01 2005-08-05 6 8

user2 2005-05-15 2005-05-31 5 5

user2 2005-06-01 2005-06-05 5 6

user3 2006-01-01 2006-01-31 1 1

user3 2006-02-01 2006-02-28 1 2

user3 2006-03-01 2006-03-31 1 3

user3 2006-04-01 2006-04-30 1 4

user3 2006-05-01 2006-05-31 1 5

user3 2006-06-01 2006-06-01 1 6

user4 2007-05-13 2007-05-31 5 5

user4 2007-06-01 2007-06-30 5 6

user4 2007-07-01 2007-07-30 5 7

 

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

WITH #temp(id, begin_dt, end_dt) AS
(
SELECT 'user1', CAST('2005-06-15' AS DATE), CAST('2005-08-05' AS DATE)
UNION ALL SELECT 'user2', '2005-05-15', '2005-06-05'
UNION ALL SELECT 'user3', '2006-01-01', '2006-06-01'
UNION ALL SELECT 'user4', '2007-05-13', '2007-07-30'
)
, rec AS
(
SELECT id, begin_dt, end_dt
     , DATEADD(m, DATEDIFF(m, 0, begin_dt)  , 0)   sdt
     , DATEADD(m, DATEDIFF(m, 0, begin_dt)+1, 0)-1 edt
  FROM #temp
 UNION ALL
SELECT id, begin_dt, end_dt
     , DATEADD(m, 1, sdt)   sdt
     , DATEADD(m, 2, sdt)-1 edt
  FROM rec
 WHERE edt < end_dt
)
SELECT id
     , CAST(CASE WHEN begin_dt > sdt THEN begin_dt ELSE sdt END AS DATE) sdt
     , CAST(CASE WHEN   end_dt < edt THEN   end_dt ELSE edt END AS DATE) edt
     , DATEPART(m, begin_dt) sym
     , DATEPART(m, sdt) ym
  FROM rec
 ORDER BY id, sdt
;

마농(manon94)님이 2015-11-18 14:25에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6935날짜 형 변환 문제
다중이
2015-11-24
2270
6934도와 주세요..sql 문.... [5]
아름이
2015-11-19
2579
6933이 쿼리가 MS-SQL 맞나요?? 해석 좀 도와주세요. [2]
정준민
2015-11-18
2457
6932ms sql 선수수익 문제 질문합니다! [1]
황유진
2015-11-17
2369
6931이후값 갖고 오는 방법이 있을까요. [2]
빨간운동화
2015-11-17
2249
6930쿼리 병합에 대한 문의 드립니다. [1]
으라차차
2015-11-16
2324
6929쿼리문 문의 드립니다 [1]
축구소년
2015-11-12
2433
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.072초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다