请教,如何高效的查询出表中正负相对应的行! 100ayccz]

发布时间:2016-12-8 14:02:23 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"请教,如何高效的查询出表中正负相对应的行! 100ayccz]",主要涉及到请教,如何高效的查询出表中正负相对应的行! 100ayccz]方面的内容,对于请教,如何高效的查询出表中正负相对应的行! 100ayccz]感兴趣的同学可以参考一下。

你好!       我现在就是想查询出某个表中,同种物品名称多次写入后,数量相负相加后等于零的记录. 例如: 记录号          项目名称        数量  单位   单位  金额     日期 070522170014 B超常规检查 1   25.000  次   25.0000  2007-05-22 070522180026 B超常规检查 -1  25.000  次   -25.0000 2007-05-22 就是想查询出表里正负数,  数量相加 为0的记录 多谢,新手,没有头绪,请您帮忙!  

select * from 表 where exists(select 1 from 表 a where 表.项目名称=a.项目名称 and 表.数量+a.数量=0)

drop table 表 go create table 表(记录号 varchar(20),项目名称 varchar(20),数量 int) insert into 表 select '070522170014','B超常规检查',1 union all select '070522180026','B超常规检查',-1 union all select '070522180026','B超常规检查',-2 select * from 表 where exists(select 1 from 表 a where 表.项目名称=a.项目名称 and 表.数量+a.数量=0) /* 记录号                  项目名称                 数量           -------------------- -------------------- -----------  070522170014         B超常规检查               1 070522180026         B超常规检查               -1 (所影响的行数为 2 行) */

select a.* from (select * from 表名 where 数量 >0) a inner join  (select * from 表名 where 数量 <0) b on a.项目名称=b.项目名称 where a.数量=b.数量*-1

if object_id('pubs..tb') is not null    drop table tb go create table tb(记录号 varchar(20),项目名称 varchar(20),数量 int,单位1 decimal(18,4),单位2 varchar(10),金额 decimal(18,4),日期 datetime) insert into tb(记录号,项目名称,数量,单位1,单位2,金额,日期) values('070522170014','B超常规检查',1,25.000,'次',25.0000,'2007-05-22') insert into tb(记录号,项目名称,数量,单位1,单位2,金额,日期) values('070522180026','B超常规检查',-1,25.000,'次',-25.0000,'2007-05-22') go select 项目名称,sum(数量) 数量 from tb group by 项目名称 drop table tb /* 项目名称                 数量           -------------------- -----------  B超常规检查               0 (所影响的行数为 1 行) */

if object_id('pubs..tb') is not null    drop table tb go create table tb(记录号 varchar(20),项目名称 varchar(20),数量 int,单位1 decimal(18,4),单位2 varchar(10),金额 decimal(18,4),日期 datetime) insert into tb(记录号,项目名称,数量,单位1,单位2,金额,日期) values('070522170014','B超常规检查',1,25.000,'次',25.0000,'2007-05-22') insert into tb(记录号,项目名称,数量,单位1,单位2,金额,日期) values('070522180026','B超常规检查',-1,25.000,'次',-25.0000,'2007-05-22') go select a.* from tb a, (select 项目名称,sum(数量) 数量 from tb group by 项目名称) b where a.项目名称 = b.项目名称 and b.数量 = 0 drop table tb /* 记录号                  项目名称                 数量          单位1                  单位2        金额                   日期                                                      -------------------- -------------------- ----------- -------------------- ---------- -------------------- ------------------------------------------------------  070522170014         B超常规检查               1           25.0000              次          25.0000              2007-05-22 00:00:00.000 070522180026         B超常规检查               -1          25.0000              次          -25.0000             2007-05-22 00:00:00.000 (所影响的行数为 2 行) */

if object_id('pubs..tb') is not null    drop table tb go create table tb(记录号 varchar(20),项目名称 varchar(20),数量 int,单位1 decimal(18,4),单位2 varchar(10),金额 decimal(18,4),日期 datetime) insert into tb(记录号,项目名称,数量,单位1,单位2,金额,日期) values('070522170014','B超常规检查',1,25.000,'次',25.0000,'2007-05-22') insert into tb(记录号,项目名称,数量,单位1,单位2,金额,日期) values('070522180026','B超常规检查',-1,25.000,'次',-25.0000,'2007-05-22') go select a.* from tb a, (select 项目名称,sum(金额) 金额 from tb group by 项目名称) b where a.项目名称 = b.项目名称 and b.金额 = 0 drop table tb /* 记录号                  项目名称                 数量          单位1                  单位2        金额                   日期                                                      -------------------- -------------------- ----------- -------------------- ---------- -------------------- ------------------------------------------------------  070522170014         B超常规检查               1           25.0000              次          25.0000              2007-05-22 00:00:00.000 070522180026         B超常规检查               -1          25.0000              次          -25.0000             2007-05-22 00:00:00.000 (所影响的行数为 2 行) */

wangtiecheng(不知不为过,不学就是错!) 的效率好象高, 要是多行相加为0也可以的话dawugui(潇洒老乌龟) 可以

wangtiecheng(不知不为过,不学就是错!)  如果正负数不等,是几合起来相加为0的话,就不行,就要用gahade(与君共勉) 的语句了

谢谢老师们!非常感谢 各位老师好厉害,我想了几天都解决不了,高手一到,现在就解决了,,不过还有一点就是: 现在一正一负对应的查询出来了,再把不对应的负数同时也查出来,例: 记录号      项目名称      数量    单位      单位    金额          日期   070522170014 B超常规检查   1      25.000    次      25.0000    2007-05-22   070522180026 B超常规检查   -1    25.000    次      -25.0000  2007-05-22   070523100020 B超常规检查   -1    25.000    次      -25.0000  2007-05-23   再次将: 070523100020 B超常规检查   -1    25.000    次      -25.0000  2007-05-23   这一条不对应的负数查出来, 再次感谢!

上一篇:数据库查询问题,高手来帮忙解决下,在线等 20starworm]
下一篇:在SQLServer中用XQuery分解XML数据 100yanglilibaobao]

相关文章

相关评论