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语句的
答案 0 :(得分:0)
由于要在结果中包含许多列,因此必须为每个列使用1个CASE语句。
WHERE部分可以简化为:
WHERE pointname LIKE '%Output%' OR
pointname LIKE '%Over%' OR
pointname LIKE '%Schedule%'
此条件保证至少1 为NOT NULL
,因此无需检查IS NOT NULL
。