2017-03-02 273 views
0

我有一个查询从条件满足的表中选择列,问题是这个逻辑被重复多次(每个列需要一次),并想知道是否有更好的这样做的方式。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必须通过列作为参数,而不是价值wouldnt我? –

回答

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