如何在一个组合中合并多个case语句

时间:2018-12-14 20:14:24

标签: sql sql-server-2016 case-statement

select row_id, pointname,
       CASE when pointname like '%Output%'  
            then (select value)  
       END AS Output,  
       CASE when pointname like '%Over%'     
            then (select value)    
       END AS Over,    
       CASE when pointname like '%Schedule%'  
            then (select value)  
      END AS Schedule  
FROM Table1 JOIN
     TABLE2
     ON "Join Condition"    
WHERE (pointname LIKE '%Output%' AND 'Output' IS NOT NULL) OR  
      (pointname LIKE '%Over%' AND 'Over' IS NOT NULL) OR  
      (pointname LIKE '%Schedule%' AND 'Schedule' IS NOT NULL)   

================================================ ======================
使用Case语句,我需要显示一些列,其中包括基于某些条件的列别名。有没有更好的方法来实现这一目标? 另一个问题是-我可以将IS NOT NULL函数与要检查的不同列值结合使用吗?

我在这里的第一篇文章,如果需要澄清,请告诉我。 谢谢!

预期输出-

Row_id    pointname     Output    Over   Schedule  
123456    Over           NULL     10       NULL  
123457    Output         4.3222   NULL     NULL   
123458    Schedule       NULL     NULL     6.3333   

我只有23列这样的列,因此在查询中搜索用于优化case语句的

1 个答案:

答案 0 :(得分:0)

由于要在结果中包含许多列,因此必须为每个列使用1个CASE语句。
WHERE部分可以简化为:

WHERE pointname LIKE '%Output%' OR  
      pointname LIKE '%Over%' OR  
      pointname LIKE '%Schedule%' 

此条件保证至少1 NOT NULL,因此无需检查IS NOT NULL