在sql- case中更好地使用冗余子查询

时间:2013-04-01 13:08:23

标签: sql sql-server case

我有一个关于SQL语句的问题:是否可以“定义一个子查询”以供多种用法使用。这听起来有点令人困惑但是通过以下示例,我认为很清楚我的想法:

select 
 Column1,
 Column2,
 Case
    WHEN <BigSubquery> > 0 THEN <BigSubquery>
    ELSE 0
 END
from ...

我该怎么做,或者我可以使用什么。我有一个很好的查询,但它是一个巨大的代码,不能用于维护。

2 个答案:

答案 0 :(得分:1)

如果您使用的是子查询,则应将条件放在子查询中。例如,如果你有:

(select sum(x) from . . . )

然后做:

(select (case when sum(x) > 0 then sum(x) else 0 end) from . . .

答案 1 :(得分:0)

如果您将查询重写为

select 
   Column1,
   Column2,
   Case
       WHEN Column3 > 0 THEN Column3
       ELSE 0
   END
from 
(
    select 
        Column1,
        Column2,
        BigSubquery as Column3
    from ...
)
t

然后你避免重复“BigSubquery”,但你确实复制了选择列表。