首页 > 解决方案 > 如何在 SQL Server 中选择非零行

问题描述

我正在使用 MS SQL Server。我的表中总共有 20 列,其中 10 列是 varchar,10 列是 int。我必须获取在这 10 个 int 行中有任何非零值的所有行(比如 p1 到 p10)

我做了以下查询

select * from table_name where exists (select * from table_name where p1 > 0)

我想选择值大于 0 的 p1 到 p10 列(在其中任何一个中)。此查询返回所有行。我无法找到解决方法。

标签: sqlsql-servertsql

解决方案


尝试这个:

select * 
from table_name 
where p1 > 0 OR p2 > 0 OR ... OR p10 > 0

或者

select * 
from table_name 
where COALESCE(p1, p2, ... ,p10) > 0

此外,如果有兴趣,您的查询不会按您的意愿工作,因为您告诉引擎做不同的事情。你是说:

  1. 给我所有的行

    select * from table_name T1
    
  2. 如果条件为真 - 条件是,表中是否有一行(并且至少有一行)

    where exists 
    (
        select * from table_name T2 where T2.p1 > 0
    )
    

如果你想使用存在,你需要为每一行评估这样的条件:

select * from table_name T1
where exists 
(
    select * 
    from table_name T2 
    where T2.p1 > 0
        AND T1.[id] = T2.[id]
)

但在这种情况下,这是一种矫枉过正。


推荐阅读