2016-10-14 6 views
1

私が引っ張っているソースコードに基づいてAgeBucketフィールドを作成するのに役立つクエリを見つけようとしています。現在は、BusinessAgeというフィールドを作成し、基本的にはリクエストの開始日から営業日数を計算し、以下のコードを説明しようとしました。フィールドを別のフィールドのケースステートメントから外す

私は、例えば、言う... AgeBucket場を作りたい、それが返す番号を、オフに基づいて
CASE WHEN [EndDate] > [StartDate] THEN [BusinessCalendarDayNum] - [BusinessCalendarDayNum] --End Date - Start Date 
    WHEN [EndDate] IS NULL and [StartDate] IS NOT NULL THEN [BusinessCalendarDayNum] - [BusinessCalendarDayNum] -- GetDate - StartDate 
    WHEN [EndDate] = [StartDate] THEN 1 
    END AS BusinessAge, 

...

CASE WHEN BusinessAge >=0 and BusinessAge <6 THEN '0-5' 
    WHEN BusinessAge >5 and BusinessAge <11 THEN '6-10' 

というように、複数の条件を持ちます。

上記のクエリを操作し、Age Bucketフィールドを作成するために使用できるより複雑な複数のcase文を作成する方法はありますか?またはこれを行うための最善の方法は何ですか?

+0

'[BusinessCalendarDayNum] - [BusinessCalendarDayNum]' - > '0' –

答えて

1

一部更新この

SELECT BusinessAge , 
     CASE WHEN BusinessAge >= 0 AND BusinessAge < 6 THEN '0-5' 
      WHEN BusinessAge >= 6 AND BusinessAge <11 THEN '6-10' 
     END AS AgeBucket, 

FROM (
     SELECT CASE WHEN [EndDate] > [StartDate] THEN [BusinessCalendarDayNum] - [BusinessCalendarDayNum] --End Date - Start Date 
        WHEN [EndDate] IS NULL and [StartDate] IS NOT NULL THEN [BusinessCalendarDayNum] - [BusinessCalendarDayNum] -- GetDate - StartDate 
        WHEN [EndDate] = [StartDate] THEN 1 
       END AS BusinessAge 
     FROM TableName 
)t 

ように考えてみてください。

SELECT CASE WHEN [EndDate] > [StartDate] THEN [BusinessCalendarDayNum] - [BusinessCalendarDayNum] --End Date - Start Date 
        WHEN [EndDate] IS NULL and [StartDate] IS NOT NULL THEN [BusinessCalendarDayNum] - [BusinessCalendarDayNum] -- GetDate - StartDate 
        WHEN [EndDate] = [StartDate] THEN 1 
       END AS BusinessAge, 
     CASE WHEN 
       CASE WHEN [EndDate] > [StartDate] THEN [BusinessCalendarDayNum] - [BusinessCalendarDayNum] --End Date - Start Date 
        WHEN [EndDate] IS NULL and [StartDate] IS NOT NULL THEN [BusinessCalendarDayNum] - [BusinessCalendarDayNum] -- GetDate - StartDate 
        WHEN [EndDate] = [StartDate] THEN 1 
       END BETWEEN 0 AND 6 
      THEN '0-5' 
      WHEN 
       CASE WHEN [EndDate] > [StartDate] THEN [BusinessCalendarDayNum] - [BusinessCalendarDayNum] --End Date - Start Date 
        WHEN [EndDate] IS NULL and [StartDate] IS NOT NULL THEN [BusinessCalendarDayNum] - [BusinessCalendarDayNum] -- GetDate - StartDate 
        WHEN [EndDate] = [StartDate] THEN 1 
       END BETWEEN 6 AND 11 
      THEN '6-11' 
     END AS AgeBucket 

FROM TableName 
+0

は選択でそれをすべて行う方法はありますステートメントを作成する必要はありません。ほとんどの場合、同じ列を使用して、Start Date、End Date、BusinessCalendarDayNum、AgeBucket専用のCASE文を作成しますか? – smul86

+1

サブクエリは 'WHEN BusinessAge'に入れることができますが、サブクエリを4回繰り返す必要があります。だから、読むことができないので、この外観はシンプルです –

+1

ちょうどそれを試してみて –

関連する問題