Sql 我有一个查询,其中我想要的结果是记录(pids)没有附加作业代码74,如果记录有44,到目前为止,我有下面的查询

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

下表显示了人员姓名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 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%