orcle数据问题咨询

A表内容:

年份nf,部门bm

2022,部门1

2022,部门2

2023,部门3

2023,部门4

2023,部门5

B表内容:

年份nf,人员ry,部门bm

2022,甲,部门1

2023,甲,部门2

2023,乙,部门1

希望是输入年份和人员,如果B表里有符合条件(人+年)的,就返回B表的部门,然后去查询A表中对应的部门数据。如果B表中找不到符合条件(人+年)的,返回条件年份全部的满足的部门,再去A表查对应的部门数据。

下面是我在orcle数据库参考例子写的脚本,但是会提示缺失关键字(ora-00905),请问应该怎么修改及脚本呢?或者fineReport有没有公式可以使用在数据集那里?

期望效果:输入(2023,甲)得到部门2,输入(2023,丙)得到部门3、部门4、部门5.

select *

  from A表 a 

 where a.nd='2023' and

a.bm in 

case when (select count(1)

          from B表 b

         where b.ry = '甲'

           and nd = '2023') <> 0 

then

select bm

          from B表 b

         where b.ry = '甲'

           and nd = '2023'

   eles

select bm

          from B表 b where nd='2023'

end;

FineReport 用户i4307971 发布于 2023-5-29 11:10 (编辑于 2023-5-29 11:11)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
用户i4307971Lv2见习互助
发布于2023-5-30 13:57

SELECT *

  FROM A a

 WHERE a.nf = '2023'

   AND a.bm IN (SELECT bm

                  FROM B b

                 WHERE b.ry = '甲'

                   AND nf = '2023')

   AND ((SELECT count(1)

           FROM B b

          WHERE b.ry = '甲'

            AND nf = '2023') > 0)

UNION all

SELECT *

  FROM A a

 WHERE a.nf = '2023'

   AND a.bm IN (SELECT a.bm FROM A a WHERE a.nf = '2023')

   AND ((SELECT count(1)

           FROM B b

          WHERE b.ry = '甲'

            AND nf = '2023') <= 0)

  • 0关注人数
  • 164浏览人数
  • 最后回答于:2023-5-30 13:57
    请选择关闭问题的原因
    确定 取消
    返回顶部