检查项目是否有数据

问题描述

我有一个包含很多字段的表。

我想做的是查看是否有某些项目缺少某些字段。

数据示例:

+--------+----------+-------+
| ITEMNO | OPTFIELD | VALUE |
+--------+----------+-------+
| 0      | x        | 1     |
+--------+----------+-------+
| 0      | x        | 1     |
+--------+----------+-------+
| 0      | x        | 1     |
+--------+----------+-------+
| 0      | x        | 1     |
+--------+----------+-------+
| 0      | x        | 1     |
+--------+----------+-------+

我想看看是否有4个“ OPTFIELD”全部都是“ ITEMNO”。

所以我要应用的逻辑类似于:

显示所有不包含“ OPTFIELD”-“ LABEL”,“ PG4”,“ PLINE”,“ BRAND”的项目

这有可能吗?

解决方法

您的数据毫无意义。从问题的描述来看,您似乎想要itemno并没有全部4个optfield。为此,一种方法使用聚合:

select itemno
from mytable
where optfield in ('LABEL','PG4','PLINE','BRAND')
group by itemno
having count(*) < 4

另一方面,如果要显示所有丢失的(itemno,optfield)元组,则可以将itemno的列表与optfield s的派生表交叉连接,然后使用not exists

select i.itemno,o.optfield
from (select distinct itemno from mytable) i
cross join (values ('LABEL'),('PG4'),('PLINE'),('BRAND')) o(optfield)
where not exists (
    select 1 
    from mytable t
    where t.itemno = i.itemno and t.optfield = o.optfield
)