Sql 检查是否所有行的列不为空

Sql 检查是否所有行的列不为空,sql,sql-server,Sql,Sql Server,如果按列A分组的所有行在列B中均不为null,则获取信息时会遇到问题。我提供以下查询: 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 jo

如果按列A分组的所有行在列B中均不为null,则获取信息时会遇到问题。我提供以下查询:

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是否在所有行的第3列中都有值?如图所示,有一行为NULL,我想跳过z.zamodb_id=446341的所有记录。

我不知道当前HAVING子句在做什么,或者它是否工作,但下面是您可以使用的逻辑:

HAVING COUNT(*) = COUNT(zp.data_planowana)

由于COUNT不包括空值,并且COUNT*始终返回组中的记录总数,因此只有当zp.data_planowana列没有空值时,上述等式才为真。

使用窗口聚合为具有相同zamodb_id的所有行应用Tim逻辑:


您可以提供一些示例表数据和预期结果吗?所有数据都是格式化文本,而不是图像。在你花太多时间之前先看一看。
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