问题描述
我想做的是查看是否有某些项目缺少某些字段。
数据示例:
+--------+----------+-------+
| 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
)