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