Sql嵌套报错

select a.*,case when b.zhuanban is null then 0 else b.zhuanban end from(

    select a.*,case when b.db is null then 0 else b.db end from(

        select a.*,case when b.zb is null then 0 else b.zb end from (

            select loginname,realname from sys_user where unitid = '0203'

        )a left join (select loginname,count(1) zb from slj_info where letterstate = 8  --zhiban

            group by loginname

        )b on a.loginname = b.loginname

    )a left join (select loginname,count(1) db from slj_info where letterstate = 9  --duban

        group by loginname

    )b on a.loginname = b.loginname

)a left join (select loginname,count(1) zhuangban from slj_zhuanban

    group by loginname 

)b on a.loginname = b.loginname

三张表,image.png

直办督办都在info表中的状态,转办是单独一张表,怎么嵌套


lurui 发布于 2018-11-14 08:40
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
1
影丶Lv5高级互助
发布于2018-11-14 10:11
--未经测试
select a.loginname,a.realname 
     ,case when b.zb is null then 0 else b.zb end zb
     ,case when c.db is null then 0 else c.db end db
     ,case when d.zhuangban is null then 0 else d.zhuangban end zhuangban
from sys_user a 
where unitid = '0203' 
left join (
    select loginname,count(1) zb from slj_info where letterstate = 8  --zhiban
      group by loginname

)b on b.loginname = a.loginname
left join (
    select loginname,count(1) db from slj_info where letterstate = 9  --duban
      group by loginname
)c on c.loginname = a.loginname
left join 
(
    select loginname,count(1) zhuangban from slj_zhuanban
      group by loginname 
)d on d.loginname = a.loginname

你这是把它想得太复杂了,然后把自己套死了,没必要套那么多层。



最佳回答
0
离_度Lv3中级互助
发布于2018-11-14 09:38

没有关联条件吗?能用UNION  ALL 吗

  • lurui lurui(提问者) 三张表的loginname字段是相同的
    2018-11-14 09:52 
  • 离_度 离_度 回复 lurui(提问者) 那就用你说的这个字段left join 取不到值吗?
    2018-11-14 09:55 
最佳回答
0
吴浩Lv6中级互助
发布于2018-11-14 09:41

你的意思是直板,转办,和督办显示在一起是吗。(数据库是oracle吗)

  • lurui lurui(提问者) 直办督办在info表中,是letterstate 的状态 转办是另外一张表 他们关联的是loginname
    2018-11-14 09:52 
  • 吴浩 吴浩 回复 lurui(提问者) select count(a.zb),count(a.db),count(b.zhuangban) from slj_info a left join slj_zhuanban b on a.loginname = b.loginname where 1=1 and a.zb is not null and a.db is not null and b.zhuanban is not null group by a.loginname,b.loginname
    2018-11-14 10:24 
最佳回答
0
leeyofalLv2见习互助
发布于2018-11-14 09:59(编辑于 2018-12-26 22:08)

明显我的回答是对的,而且比被采纳的早,居然没被选上。。。

select a.loginname, a.realname, 

       case when b.zb is null then 0 else b.zb end zb,

       case when c.db is null then 0 else c.db end db,

       case when d.zhuanban is null then 0 else d.zhuanban end zhuanban

  from (select loginname,realname from sys_user where unitid = '0203') a

  left join 

       (select loginname, count(1) zb from slj_info where letterstate = 8  --zhiban

         group by loginname) b

    on a.loginname = b.loginname

  left join 

       (select loginname, count(1) db from slj_info where letterstate = 8  --zhiban

         group by loginname) c

    on a.loginname = c.loginname

  left join 

       (select loginname,count(1) zhuanban from slj_zhuanban

         group by loginname) d

    on a.loginname = d.loginname


最佳回答
0
圣体叶小凡Lv6高级互助
发布于2018-11-14 10:02

看看 这个时间是不是一样的,不行的话在页面做单元格过滤

  • 5关注人数
  • 730浏览人数
  • 最后回答于:2018-12-26 22:08
    请选择关闭问题的原因
    确定 取消
    返回顶部