SQL 选择在所有行中具有相同值的项目

雷迪

例如,如果下表是

SupId    ItemId          Status
1        1               Available
1        2               OOS
2        3               Available
3        4               OOS
3        5               OOS
4        6               OOS
5        7               NULL

我希望获取all itemsOOS 或 NULL 的不同供应商

一种解决方案是获取至少有一个活动项目的所有供应商(活动供应商),然后添加一个条款NOT IN活动供应商来选择非活动供应商。

有没有更好的方法来实现相同的目标?

蒂姆·比格莱森

一种选择,使用聚合:

SELECT SupId
FROM yourTable
GROUP BY SupId
HAVING
    SUM(CASE WHEN Status = 'OOS' OR Status IS NULL THEN 1 ELSE 0 END) = COUNT(*) AND
    (MAX(Status) = 'OOS' OR COUNT(Status) = 0);

这假设您需要只有全部NULL或全部OOS状态的供应商如果您只想限制这两个状态值,请使用以下命令:

SELECT SupId
FROM yourTable
GROUP BY SupId
HAVING SUM(CASE WHEN Status <> 'OOS' AND Status IS NOT NULL THEN 1 ELSE 0 END) = 0;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL 选择链接表中所有行在 x 列中具有相同值的行

使用SQL选择列1中具有相同值但列2和3中具有不同值的所有行

SQL COUNT所有具有相同或较小值的行

SQL-如何选择具有多个相同值的行

SQL选择一列中具有重复值的所有行

SQL Server选择所有列中具有1值的行

SQL:选择在特定列中具有特定值的帐户的所有行

sql-选择所有具有多个相同列的所有行

SQL:选择所有具有最大值且具有WHERE条件的行

如何在SQL中查找具有相同值但可能会排列的行的所有行

SQL 查询:从 PostgreSQL 中删除具有相同值的行

枚举sql中具有多个相同值的行

SQL Server:选择合并具有相同键的所有值

SQL - 选择所有唯一的 2 列可以具有相同的值

合并具有相同值的sql行

SQL选择两列中具有不同值的行

在 SQL 中获取列 A 中具有相同值的所有行,这些行在列 B 中只有非空值

sql查询返回具有相同列值的所有行

SQL获取具有相同ID的所有行的计数

SQL-获取具有相同ID的所有行

SQL Server:选择同一列中具有相同值的2行的最大日期/时间

SQL查询以选择具有最大列值的所有行

如何在SQL Server的表的所有列中选择具有空值的行?

需要找出SQL Server表中的所有列是否具有相同的值

什么是 sql 查询以打印来自具有相同 ID 表的多个表中的所有行?

SQL-选择列中所有值都相同的行

sql:使用单个查询在另一列中选择具有相同列值的行

SQL选择:与ID匹配的行是否都具有相同的列值

SQL 选择不同表上具有相同 FK 值的行