Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL查询中使用Not_Sql_Oracle - Fatal编程技术网

在SQL查询中使用Not

在SQL查询中使用Not,sql,oracle,Sql,Oracle,我有两张表,分别是billcrown和bank_的详细信息。 在billcrown中,每个PJNO都有一个唯一的行: PJNO GRIRNO AMT ---- ------ ---- PJ1 GRIR1 1000 PJ2 GRIR2 150 表bankdetails有 PJNO GRIRNO AMT ---- ------ --- PJ1 GRIR1 100 PJ2 GRIR2 150 PJ1 GRIR1 200 我想显示表billcrown的所有PJNO,其中bank

我有两张表,分别是billcrown和bank_的详细信息。 在billcrown中,每个PJNO都有一个唯一的行:

PJNO GRIRNO AMT
---- ------ ----
PJ1   GRIR1 1000
PJ2   GRIR2 150
表bankdetails有

PJNO GRIRNO AMT
---- ------ ---
PJ1  GRIR1  100
PJ2  GRIR2  150 
PJ1  GRIR1  200
我想显示表billcrown的所有PJNO,其中bankdetails中该PJNO的金额总和不等于billcrown中该PJNO的金额


此处,billcrown金额中的PJ1为1000,但PJ1在bankdetails中的金额总和为300。所以它应该被显示出来。但是在PJ2的情况下,billcrown和bankdetails的金额是相同的。

也许是这样的

select c.pjno
from billcrowm c join bankdetails d on d.pjno = c.pjno
group by c.pjno
having sum(c.amt) <> sum(d.amt);  
[在新信息披露后进行编辑]

与NVL的外部连接可能会完成此任务

select c.pjno
from billcrowm c left join bankdetails d on c.pjno = d.pjno
group by c.pjno
having sum(c.amt) <> nvl(sum(d.amt), 0);
[在阅读了Sharad的评论后,编辑2]

这会奏效的

with BankDetailsCTE 
as
(
Select PJNO, sum(AMT) as amt from BankDetails group by PJNO
)
Select d.Pjno from Billcrown d 
left join BankDetailsCTE c
on d.pjno = c.pjno
where d.AMT <> c.amt or c.amt is null

如果我理解的很好,你所需要的就是一个带有外部连接的群组

使用以下表格:

create table billcrown (PJNO, GRIRNO, AMT) as (
select 'PJ1', 'GRIR1', 1000 from dual union
select 'PJ2', 'GRIR2',  150 from dual union
select 'PJXX','XXXXX',  100 from dual
);
create table bankdetails (PJNO, GRIRNO, AMT) as (
select 'PJ1',  'GRIR1',  100 from dual union 
select 'PJ2',  'GRIR2',  150 from dual union  
select 'PJ1',  'GRIR1',  200 from dual
);
这个

给出:

PJNO GRIRNO        AMT SUM(BD.AMT)
---- ------ ---------- -----------
PJXX XXXXX         100            
PJ1  GRIR1        1000         300

谢谢,但是问题是存在2571行,但是它只显示65行。我检查了同样的结果,发现在BayStices表中没有剩余的PJ。请考虑这个情况,外部连接NVL;我编辑了我的邮件,看一看。谢谢。你真的节省了我的时间。如果Bankdetails表中还有一行的值为PJ1 GRIR1700,那么上面提供的解决方案就不起作用了。你说得对,@Sharad,谢谢。我编辑了我的消息,希望能将其修复。假设在Billcrom表中也有PJ3,是否要显示此值?此解决方案比上面提供的解决方案更有效。
with BankDetailsCTE 
as
(
Select PJNO, sum(AMT) as amt from BankDetails group by PJNO
)
Select d.Pjno from Billcrown d 
left join BankDetailsCTE c
on d.pjno = c.pjno
where d.AMT <> c.amt or c.amt is null
create table billcrown (PJNO, GRIRNO, AMT) as (
select 'PJ1', 'GRIR1', 1000 from dual union
select 'PJ2', 'GRIR2',  150 from dual union
select 'PJXX','XXXXX',  100 from dual
);
create table bankdetails (PJNO, GRIRNO, AMT) as (
select 'PJ1',  'GRIR1',  100 from dual union 
select 'PJ2',  'GRIR2',  150 from dual union  
select 'PJ1',  'GRIR1',  200 from dual
);
select bc.PJNO, bc.GRIRNO, bc.AMT, sum(bd.amt) 
from billCrown bc
        left join bankDetails bd
        on (bd.PJNO = bc.PJNO
            and bd.GRIRNO = bc.GRIRNO -- do you need this?
           )
group by bc.PJNO, bc.GRIRNO, bc.AMT
having sum(nvl(bd.amt, 0)) != bc.amt
PJNO GRIRNO        AMT SUM(BD.AMT)
---- ------ ---------- -----------
PJXX XXXXX         100            
PJ1  GRIR1        1000         300