0

ユーザーに適切に表示するために、ビュー内のユーザー データを処理する必要がある状況があります。次のフィールドを持つテーブルがあります。

StartDate   DateTime
EndDate     DateTime
MoneySpent  Double

複雑な部分は、開始日と終了日が 15 日、1 か月、または 2 か月離れている可能性があり、特定のパターンがないことです。パターンとは、日付が 2012 年 4 月 1 日から 2012 年 6 月 1 日までのように常に指定された形式であるとは限らないことを意味します。

開始日から「月」コンポーネントを選択し、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 年 5 月 1 日 -> 2013 年 6 月 1 日 = 5 月

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

それを達成するために、次のサンプルスクリプトを作成しました。変数を DB フィールドに置き換えるだけです。

            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 に答える