我有一个关于 SQL 语句的问题:是否可以“定义一个子查询”以防万一。这听起来有点令人困惑,但是通过以下示例,我认为我的想法很清楚:
select
Column1,
Column2,
Case
WHEN <BigSubquery> > 0 THEN <BigSubquery>
ELSE 0
END
from ...
我该怎么做,或者我可以使用什么。我有这样一个查询,效果很好,但它是一个巨大的代码,不能用于维护。
我有一个关于 SQL 语句的问题:是否可以“定义一个子查询”以防万一。这听起来有点令人困惑,但是通过以下示例,我认为我的想法很清楚:
select
Column1,
Column2,
Case
WHEN <BigSubquery> > 0 THEN <BigSubquery>
ELSE 0
END
from ...
我该怎么做,或者我可以使用什么。我有这样一个查询,效果很好,但它是一个巨大的代码,不能用于维护。
如果您使用子查询,则应将条件放在子查询中。例如,如果您有:
(select sum(x) from . . . )
然后做:
(select (case when sum(x) > 0 then sum(x) else 0 end) from . . .
如果您将查询重写为
select
Column1,
Column2,
Case
WHEN Column3 > 0 THEN Column3
ELSE 0
END
from
(
select
Column1,
Column2,
BigSubquery as Column3
from ...
)
t
然后你避免重复“BigSubquery”,但你确实复制了选择列表。