예전에 햇었던건데
아무리 생각해도 떠오르지가 않네요 ㅠㅠ...
디비에 날짜가
번호 시작일 종료일 요금
1 2016-02-01 2016-02-03 100
2 2016-02-04 2016-02-05 200
위처럼 있을 때 2월 2일부터 2월 4일까지의 요금을 구하려면
어떤식으로 쿼리를 짜야할까요? ..
하루씩 돌려가며 임시테이블 넣는방법도 생각해보긴했는데 그냥 쿼리 한줄로 나오는게
있을거같은데 생각이 안나네요 ㅠ
Comment 2
-
Terry
2016.02.03 18:21
-
Terry
2016.02.03 18:31
제가 유추한 내용이 맞다는 전제하에서 쿼리를 작성해보았습니다.
하기 쿼리 참고하세요.
---쿼리시작---
Declare @as_from_ymd char(10)
,@as_to_ymd char(10)Select @as_from_ymd = '2016-02-02'
,@as_to_ymd = '2016-02-04';with tblA(번호,시작일,종료일,요금) As
(
Select 1,'2016-02-01','2016-02-03',100 Union All
Select 2,'2016-02-04','2016-02-05',200
)
,tblB(번호,일자,남은일자,요금) As
(
Select a.번호
,Convert(char(10),a.시작일,126)
,Datediff(day,a.시작일,a.종료일) + 1
,Round(a.요금 / ( Datediff(day,a.시작일,a.종료일) + 1),0)
From tblA aUnion All
Select a.번호
,Convert(char(10),DATEADD(day,1,a.일자),126)
,a.남은일자 - 1
,a.요금
From tblB a
Where a.남은일자 - 1 <> 0
)
Select @as_from_ymd As 시작일자
,@as_to_ymd As 종료일자
,SUM(a.요금) As 요금
From tblB a
Where a.일자 Between @as_from_ymd And @as_to_ymd
---쿼리끝---
번호 시작일 종료일 요금
1 2016-02-01 2016-02-03 100
2 2016-02-04 2016-02-05 200
2월2일부터 2월4일까지의 요금이라고 하셨는데
어떤 형태로 처리가 가능한건지요??
1의 경우 2016-02-01 ~ 2016-02-03 ..총 3일치 요금이며 요금은 100원
2의 경우 2016-02-04 ~ 2016-02-05 ..총 2일치 요금이며 요금은 200원
Sum ( 요금 / (종료일자-시작일자) * 포함되는일자수 ) 로 처리가 되는게 맞는지요?
맞다면 1의 경우처럼 딱 떨어지지 않는 경우는 어떤 형태로 처리하는지요?
제가 유추한 내용이 아니라면 어떤 형태로 처리를 하고자 하심인지 궁금하네요.