0

我有一种情况,我需要在视图中处理用户数据,以便适当地呈现给用户。我有一个包含以下字段的表:

StartDate   DateTime
EndDate     DateTime
MoneySpent  Double

复杂的部分是,开始日期和结束日期可能相隔 15 天,或相隔 1 个月或相隔 2 个月,并且没有特定的模式。所谓模式,我的意思是日期并不总是采用指定的格式,例如 2012 年 4 月 1 日至 2012 年 6 月 1 日。例如,这可能是 2012 年 4 月 1 日至 2012 年 5 月 31 日。

我有一个视图,它从开始日期选择“月份”组件并在 MoneySpent 列上执行一些聚合函数。但是对于上述日期,月份组件应该理想地返回 2 个不同的月份。到目前为止,它认为所有钱都花在了 StartDate 中,并且聚合函数可以理解地返回错误的值。我如何编写一个可以解决我的情况的函数?

StartDate          EndDate          Spend
1 May 2012        1 Jun 2012         100
1 Jun 2012        30 Jun 2012        200
1 Jul 2012        31 Aug 2012        500
31 Aug 2012       29 Sep 2012        300

合并视图

Month      Spend
 May        100
 Jun        200
 Jul        250
 Aug        250
 Sep        300
4

1 回答 1

0

阅读您的评论后,您似乎想要实现以下目标:

2013-05-01 -> 2013-05-20 = 5 月

2013-05-01 -> 2013-06-01 = 5 月

2013-05-01 -> 2013-06-20 = 5 月和 6 月

我编写了以下示例脚本来实现这一点。只需用您的数据库字段替换变量。

            DECLARE @startDate AS DATETIME
            DECLARE @endDate AS DATETIME

            SELECT @startDate  = '2013-05-01'
            SELECT @endDate = '2013-06-02'

            SELECT 
                CASE WHEN MONTH(@startDate) <> MONTH(@endDate) THEN
                    CASE WHEN DAY(@endDate) > 1 THEN
                        DATENAME(MONTH, @startDate) + ' AND ' + DATENAME(MONTH, @endDate)
                    ELSE DATENAME(MONTH, @startDate)
                    END
                ELSE DATENAME(MONTH, @startDate)
                END AS theDate

这能达到你想要的吗?

于 2013-10-15T14:51:35.700 回答