sql - 如何在 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 列(在其中任何一个中)。此查询返回所有行。我无法找到解决方法。
解决方案
尝试这个:
select *
from table_name
where p1 > 0 OR p2 > 0 OR ... OR p10 > 0
或者
select *
from table_name
where COALESCE(p1, p2, ... ,p10) > 0
此外,如果有兴趣,您的查询不会按您的意愿工作,因为您告诉引擎做不同的事情。你是说:
给我所有的行
select * from table_name T1
如果条件为真 - 条件是,表中是否有一行(并且至少有一行)
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]
)
但在这种情况下,这是一种矫枉过正。
推荐阅读
- java - 对象存在于 HTML 中,但我无法选择它
- c - C - 增量不更新变量值
- arrays - 有没有办法在一个单元格范围内搜索多个字符串,并返回按第一列排序的范围?
- amazon-web-services - 在 Spring Boot 中设置 AWS 凭证以进行本地测试和 EC2 部署
- r - R data.table - 笛卡尔连接的最佳选择
- java - FXML 无法创建 javafx.scene.Cursor 的实例
- excel - M 表使用每列的预定义类型
- python - 将字典列表转换为 CSV 并使用 SendGrid 附加到电子邮件
- flutter - List Flutter 操作后重建 ListView
- youtube - YouTube 使用什么算法来改变播放速度而不影响音频音高?