TSQL-CASE-WHEN语句的多个别名
我有一个查询,它从满足条件的表中选择列,问题是这个逻辑重复了好几次(对于所需的每一列,重复一次),并且想知道是否有更好的方法TSQL-CASE-WHEN语句的多个别名,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我有一个查询,它从满足条件的表中选择列,问题是这个逻辑重复了好几次(对于所需的每一列,重复一次),并且想知道是否有更好的方法 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 //R
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 ''
不是以你描述的方式 另一种选择是使用或:
否。每列都需要自己的select语句 对于这个CASE语句的特定应用,可以使用
您可以编写一个函数来保存CASE逻辑,只要向它提供日期就行了。@Jens我是这么想的,但我必须将列作为参数传递,而不是值传递,不是吗?
select
SelectedDate = coalesce(date1,date2)
, [Day] = coalesce(day1,day2)
, [Hour] = coalesce(hour1,hour2)
, [Minute] = coalesce(minute1,minute2)
from t
SELECT COALESCE(date1, date2) AS selectedDate FROM SomeTable