Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql-case中更好地使用冗余子查询_Sql_Sql Server_Case - Fatal编程技术网

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

在sql-case中更好地使用冗余子查询,sql,sql-server,case,Sql,Sql Server,Case,我对SQL语句有一个问题:在这种情况下,是否可以“定义子查询”以供多次使用。这听起来有点令人困惑,但通过以下示例,我认为我的想法很清楚: select Column1, Column2, Case WHEN <BigSubquery> > 0 THEN <BigSubquery> ELSE 0 END from ... 选择 第1栏, 第2栏, 案例 当>0时,则 其他0 结束 从…起 我怎样才能做到这一点,或者我可以使用什么。我有这样

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

select 
 Column1,
 Column2,
 Case
    WHEN <BigSubquery> > 0 THEN <BigSubquery>
    ELSE 0
 END
from ...
选择
第1栏,
第2栏,
案例
当>0时,则
其他0
结束
从…起

我怎样才能做到这一点,或者我可以使用什么。我有这样一个查询,它工作得很好,但它是一个庞大的代码,不可用于维护。

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

(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”,但会复制选择列表。

您可能可以将其重写为更合理的联接。然而,在没有看到查询的其余部分的情况下,给出建议是不明智的。例如,两个子查询是否相关?我正在比较两个不同表中的值:从一个表中,我必须计算一个值,例如,和val1,我必须用第二个表val2中的值来计算和。根据具体情况,可能是案例val1>val2而不是val1或其他情况!我将寻找一个实际的例子,也许有一个更好,但这并不是我希望找到的!似乎没有任何构造提供这种功能!是否可以声明一个可以保存子查询结果的变量?如果BigSubquery独立于主查询,则可以首先执行它并将结果保存在变量中。否则不会。我正在比较两个不同表中的值:从一个表中,我必须计算一个值,例如总和val1,我必须用第二个表val2中的值对总和进行比较。根据具体情况,可能是案例val1>val2而不是val1或其他情况@xandi1987。你的例子是
。我假设它们是一样的,因为它们有相同的名字。您可以将
案例
带入子查询。