Sql 我有一个查询,其中我想要的结果是记录(pids)没有附加作业代码74,如果记录有44,到目前为止,我有下面的查询
下表显示了人员姓名PID的形式,所有Sql 我有一个查询,其中我想要的结果是记录(pids)没有附加作业代码74,如果记录有44,到目前为止,我有下面的查询,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,下表显示了人员姓名PID的形式,所有人员工作都有工作代码的信息,如71,72,73,74,44,55。。。我想要一个结果,工作代码是44,但74不在(不在(74)这样的,并且当前查询没有问题,只想添加条件不在74 select aa.pid , aa.contid , bb.fnm , bb.mnm , bb.lnm , bb.sufx , aa.title , wm_concat(cc.job) as jobs from
人员工作
都有工作代码
的信息,如71
,72
,73
,74
,44
,55
。。。我想要一个结果,工作代码是44
,但74
不在(不在(74
)这样的,并且当前查询没有问题,只想添加条件不在74
select aa.pid
, aa.contid
, bb.fnm
, bb.mnm
, bb.lnm
, bb.sufx
, aa.title
, wm_concat(cc.job) as jobs
from people aa
join mmd_all_people bb
on aa.contid = bb.contid
join people_jobs cc
on aa.pid = cc.pid
and aa.seq = cc.seq
group by aa.pid
, aa.contid
, bb.fnm
, bb.mnm
, bb.lnm
, bb.sufx
, aa.title
having (wm_concat(cc.job)) like '%44%'
我怀疑你想要:
having sum(case when cc.job = 44 then 1 else 0 end) > 0
也就是说,计算“44”的数量并返回至少有一行的行
无需将这些值连接在一起。或为此目的将数字转换为字符串
编辑:
有关评论:
having sum(case when cc.job = 44 then 1 else 0 end) > 0 and
sum(case when cc.job = 74 then 1 else 0 end) = 0
< P> >我想你应该考虑<代码>存在< <代码> > <代码> > 条件下过滤:
select aa.pid,
aa.contid,
bb.fnm,
bb.mnm,
bb.lnm,
bb.sufx,
aa.title,
wm_concat(cc.job) as jobs
from people aa
join mmd_all_people bb
on aa.contid = bb.contid
join people_jobs cc
on aa.pid = cc.pid
and aa.seq = cc.seq
where exists ( select 1
from people_jobs
where pid = cc.pid
and (( cc.job = 44 and cc.job != 74 ) or cc.job != 44 )
)
group by aa.pid, aa.contid,
bb.fnm, bb.mnm, bb.lnm, bb.sufx,
aa.title
其中我假设cc.jod
是一个非空字段,并且没有对其应用任何nvl()
操作
作为旁注,
vm\u concat()
不受支持。相反,如果您的DBMS版本至少为11.2
,请使用listagg()
。您使用的是MySQL还是Oracle?向我们展示一些示例表数据和预期结果(格式为文本,而非图像)。同时解释当前查询的错误。(让您更容易理解,)我使用的是Oracle,下面的表格是人们姓名PID的表单,所有人的工作都有工作代码的信息,如71 72 73 74 44 55…(importat one)我想要一个结果,其中工作代码是44,但74不在(74)中,不在(74)中,像这样,当前的查询没有问题,只是想添加条件,而不是在74Hey中,不是作为注释。改为编辑问题。(同时移除标记。)但查询是正确的,您希望我更改什么是的,但我还希望记录不应有的结果74@muiz. . . 这是对条件的一个简单调整。sum(当cc.job=44时为1,否则0结束)>0和sum(当cc.job=74时为1,否则0结束)=0这仍然显示74的数据,我不想要那些有74个作业的结果,但结果应该是44
SELECT ee.pid,
'44 and no 74' AS Instructions,
ee.coname,
enum.totass,--, pf.source as Username ,
Wm_concat(DISTINCT cc.job) AS jobs
FROM entities ee
join entnums enum
ON ee.pid = enum.pid
join people aa
ON ee.pid = aa.pid
join mmd_all_people bb
ON aa.contid = bb.contid
join people_jobs cc
ON aa.pid = cc.pid
AND aa.seq = cc.seq
WHERE ee.mmd = 'A'
AND ( ( ee.mmd_cat ) IN ( 5, 10, 15, 20,
25, 28, 30, 38, 66 ) )
AND ( ( enum.totass ) > 50000 )
GROUP BY ee.pid,
ee.coname,
enum.totass
HAVING Wm_concat(DISTINCT cc.job) LIKE '%44%'
AND Wm_concat(DISTINCT cc.job) NOT LIKE '%74%