Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL-CASE-WHEN语句的多个别名_Sql_Sql Server_Tsql_Sql Server 2008 R2 - Fatal编程技术网

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