我正在尝试更改从多个连接表中选择数据的基本查询,并根据CASE WHEN
以下内容过滤掉行。结果集返回如下:
如果所有行在列中都返回 0,则在
CASE
列中返回一行 '0'OVERDUE
(“返回一行”部分由 .)处理DISTINCT
。)如果任何行为该列返回 1,则在该
CASE
列中返回一个带有 '1' 的OVERDUE
行。
基数如下:
SELECT DISTINCT t1.*,
CASE WHEN t3.MTemp > t3.MTempLimit
then 1
when t3.TotHours > t3.THoursLimit
then 1
else 0
end [Overdue]
from table_1 t1
LEFT JOIN table_2 t2 on t1.ResNo = t2.ResNo and t1.PCode = t2.PCode
LEFT JOIN table_3 t3 on t2.RepJobNo = t3.RepJobNo
LEFT JOIN table_4 t4 on t4.TypeID = t2.RepType
WHERE t2.RepStat = 1
问题是,我已经通过使用临时表并对临时表的列进行IF EXISTS/ELSE
查询来创建它的工作版本。OVERDUE
但是,我被告知此解决方案可能无法使用(由于必须通过某些前端软件)。
是否可以为此做一个不涉及使用临时表的解决方法?我一直在尝试同时使用派生表和 CTE,但它们都没有产生任何可用的东西,因为不能IF/ELSE
在它们之后使用子句(这是我所指望的)。
我仍然掌握 T-SQL 的窍门,因此将不胜感激任何帮助。