2017-03-02 7 views
0

条件が満たされているテーブルから列を選択するクエリがありますが、このロジックは複数回繰り返されます(必要な列ごとに1回)それを行う方法。TSQL - CASE WHENステートメントの複数のエイリアス

SELECT 
    CASE 
    WHEN (date1 IS NULL) THEN [date2]  
    WHEN (date1 IS NOT NULL OR (date1 IS NOT NULL AND date2 IS NOT NULL)) THEN [date1] 
    ELSE '' 
    END AS selectedDate 

//Repeat above statement for [day], [hour], [minute] 

は、私は彼らがすべてではなく、列ごとに同じ文を複数回書き換えの同じ条件に依存しているように、その可能性は、別の別名を持つ同じ文の下にこれらのcase文の数を集計する場合のために、知りたいですたとえば私は、次のことを試してみました:

あなたが記述されている方法で
SELECT 
    CASE 
    WHEN (date1 IS NULL) THEN [date2] as "selectedDate", [day2] as "day", [hour2] as "hour", [minute2] as "minute" 
    WHEN (date1 IS NOT NULL OR (date1 IS NOT NULL AND date2 IS NOT NULL)) THEN [date1] as "selectedDate", [day1] as "day", [hour1] as "hour", [minute1] as "minute" 
    ELSE '' 
+0

CASEロジックを保持し、手に入らない場合は、日付を入力するだけの関数を書くことができます。 – Jens

+0

@Jens私はそれを考えていましたが、idは値ではなくパラメータとして列を渡す必要がありますか? –

答えて

1

ない...

を代替isnull()またはcoalesce()を使用することです:

select 
    SelectedDate = coalesce(date1,date2) 
    , [Day]  = coalesce(day1,day2) 
    , [Hour]  = coalesce(hour1,hour2) 
    , [Minute]  = coalesce(minute1,minute2) 
from t 
0

いいえ。各列には、独自のselect文が必要です。

このCASEステートメントの特定のアプリケーションでは、代わりにCOALESCEを使用できます。

SELECT COALESCE(date1, date2) AS selectedDate FROM SomeTable 
関連する問題