【发布时间】:2015-03-27 15:42:09
【问题描述】:
DECLARE @ServDate DATE = '01/04/2013',
@PaidDate DATE = '01/25/2013'
SELECT @ServDate AS DATE ,@PaidDate AS PaidDate ,
CASE WHEN (MONTH(@ServDate) IN (9,10,11) AND MONTH(@PaidDate) IN (9,10,11)
AND YEAR(@ServDate) = YEAR(@PaidDate)) AND (convert(CHAR(4), YEAR(@ServDate))
= convert(CHAR(4), YEAR(@PaidDate)))
THEN 'FSY' + ''+ convert(CHAR(4), YEAR(@ServDate) + 1) + '-' + 'Q1'
WHEN (MONTH(@ServDate) IN (12,1,2) AND MONTH(@PaidDate) IN (12,1,2) AND
YEAR(@ServDate) = YEAR(@PaidDate)) AND ( (convert(CHAR(4), YEAR(@ServDate) + 1)
= convert(CHAR(4), YEAR(@PaidDate))) OR (convert(CHAR(4), YEAR(@ServDate))
= convert(CHAR(4), YEAR(@PaidDate))) )
THEN 'FSY' + ''+
CASE WHEN (MONTH(@ServDate) IN (1,2) AND MONTH(@PaidDate) IN (1,2)) AND
(convert(CHAR(4), YEAR(@ServDate)) = convert(CHAR(4), YEAR(@PaidDate)))
THEN convert(CHAR(4), YEAR(@ServDate) - 0) + '-' + 'Q2'
ELSE convert(CHAR(4), YEAR(@ServDate) + 1) + '-' + 'Q2'
END
WHEN (MONTH(@ServDate) IN (3,4,5) AND MONTH(@PaidDate) IN (3,4,5) AND
YEAR(@ServDate) = YEAR(@PaidDate)) AND (convert(CHAR(4), YEAR(@ServDate))
= convert(CHAR(4), YEAR(@PaidDate)))
THEN 'FSY' + ''+ convert(CHAR(4), YEAR(@ServDate) - 0)+ ' - '+ 'Q3'
WHEN (MONTH(@ServDate) IN (6,7,8) AND MONTH(@PaidDate) IN (6,7,8) AND
YEAR(@ServDate) = YEAR(@PaidDate)) AND (convert(CHAR(4), YEAR(@ServDate))
= convert(CHAR(4), YEAR(@PaidDate)))
THEN 'FSY' + ''+ convert(CHAR(4), YEAR(@ServDate) - 0) + ' - ' + 'Q4'
ELSE 'NQ'
END AS Quarter
我必须编写一个 case 表达式来确定也属于哪个季度日期。
我们公司第一季度开始:ServDate=9/01/2014 & 11/30/2014 Piad 日期 9/1/2014 & 11/30/2014 将是 FSY2015Q1
季度将按如下方式填充:
Q1 - DOS 9/1 to 11/30
Q1 - Paid 9/1 to 11/30
Q2 - DOS 9/1 to 2/28
Q2 - Paid 9/1 to 2/28
Q3 - DOS 9/1 to 5/31
Q3 - Paid 9/1 to 5/31
Q4 - DOS 9/1 to 8/31
Q4 - Paid 9/1 to 8/31
假设 ItemID 1 Servdate 9/01/2014 支付日期 11/30/2014 将是 FSY2015Q1
但是如果我有记录,那么让我们说 ItemID 1 Servdate 9/01/2014 Paid Date 12/30/2014 我需要它说'NQ'那是我失败的地方......
有人可以帮我吗?
【问题讨论】:
-
欢迎来到 Stack Overflow!目前还不太清楚你在问什么。看看How to Ask a Question 和Writing the Perfect Question。
标签: sql sql-server tsql case