如果在COLUMN B中按COLUMN A分组的所有行都不为空,则我在获取信息时遇到问题。我在下面提供查询:
select
z.zamodb_id, zp.zamodbpoz_id, zp.data_planowana
from
zamodbpoz zp
inner join
zamodb z on z.zamodb_id = zp.zamodb_id
inner join
sys_dok_stan ds on z.zamodb_id = ds.dok_id
inner join
cechwytw cw on cw.wytwor_id = zp.wytwor_id and cw.katparam_id = 52
left join
dyspozycje_partii dp on dp.dok_poz_id = zp.zamodbpoz_id
left join
(select
zp.zamodbpoz_id, isnull(wzp.ilosc, 0) ilosc
from
zamodb z
inner join
zamodbpoz zp on z.zamodb_id = zp.zamodb_id
left join
alokdok a on a.doknad_poz_id = zp.zamodbpoz_id and a.typdok_nad = 11
left join
dokument_wydania_zewn wz on a.dokpod_id = wz.dokwydzew_id and wz.statusdwz <> 3
left join
dokument_wydania_zewn_poz wzp on wz.dokwydzew_id = wzp.dokwydzew_id
group by
zp.zamodbpoz_id,wzp.ilosc) ile_wz on zp.zamodbpoz_id = ile_wz.zamodbpoz_id
where
ds.dok_stan_idn = 'PLANISTA' and z.statzamodb = 1
group by
zp.zamodbpoz_id, zp.ilpotw, zp.ilzreal,
dp.ilosc, ile_wz.ilosc, z.zamodb_id, zp.data_planowana
having
zp.ilpotw - zp.ilzreal - isnull(dp.ilosc, 0) - isnull(ile_wz.ilosc, 0) > 0
只有一个结果:
如何检查z.zamodb = 446341
是否在所有行的第三列中都有值?如您在图片上看到的,NULL
有一行,我想跳过所有z.zamodb_id = 446341
的记录。
答案 0 :(得分:1)
我不知道您当前的HAVING
子句在做什么,或者它是否还在工作,但这是您可以使用的逻辑:
HAVING COUNT(*) = COUNT(zp.data_planowana)
由于COUNT
不包含NULL
值,并且COUNT(*)
始终返回该组中的记录总数,因此只有{{1}列没有zp.data_planowana
值。
答案 1 :(得分:1)
使用窗口聚合将Tim的逻辑应用于具有相同zamodb_id
的所有行:
with cte as
( select z.zamodb_id,zp.zamodbpoz_id,zp.data_planowana
,count(*) over (partition by z.zamodb_id) as cntStar
,count(zp.data_planowana) over (partition by z.zamodb_id) as cntCol
from zamodbpoz zp
....
)
select *
from cte
where cntStar = cntCol