表aa里有一条记录,qty是12.
因为qty>0,所以select 1,"退货" from aa where qty < 0 是查不到记录的。
但是如果我加上Sum,就有记录了,如下:
select 1,"退货",sum(amount) from aa where qty < 0。因为我现在需要给这个语句加上 group by的,可是加上后,又查不到记录了,我的需求是需要能查到记录的。加Group by后是 select ID,"退货",sum(amount) from aa where qty < 0 group by ID。请教下,应该如何实现我的需求?还有,select 1,"退货",sum(amount) from aa where qty < 0。这种情况下为什么能查询到记录,谢谢。
因为qty>0,所以select 1,"退货" from aa where qty < 0 是查不到记录的。
但是如果我加上Sum,就有记录了,如下:
select 1,"退货",sum(amount) from aa where qty < 0。因为我现在需要给这个语句加上 group by的,可是加上后,又查不到记录了,我的需求是需要能查到记录的。加Group by后是 select ID,"退货",sum(amount) from aa where qty < 0 group by ID。请教下,应该如何实现我的需求?还有,select 1,"退货",sum(amount) from aa where qty < 0。这种情况下为什么能查询到记录,谢谢。
如果有多表,表之间如何关联?
发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
select 1,'退货' from aa where qty < 0 是查不到记录的.
此时,你用
select 1,'退货',sum(amount) from aa where qty < 0 亦不会查到记录,而仅仅查到:
1 退货 NULL
不仅仅由于你采用了qty<0,即使你采用:
select 1,'退货',sum(amount) from aa where 1=0 ,同样会得到相同的东西.
这并不是记录,而是对表中amount的统计值,由于没有符合条件的记录,所得到的amount值之和就是NULL,之所以能看到,只是由于你前面的两个是常量,因而能显示出看上去像一条记录一样的东西,它只是反应了两层意思,一是前面有两个常数,二是表中对符合条件的amount的统计值为NULL.
现在你加上了ID,并对ID进行分组统计,结果,由于表中没有符合条件的用来分组的ID,因此,你是肯定查不到记录的.
既然没有符合条件的分组记录,你要加group查什么呢?
设想表中的qty并不是你字面上意思所显露的均>0,而是有<0的,它代表了退货,而amount代表了退货量,那如果要以ID来统计退货量的话,可以采用下面的语句:
create table tb(id int,amount int,qty int)
insert into tb select 1,5,-1
go
select ID,'退货',sum(case when qty<0 then amount else 0 end) from tb
group by id
go
drop table tb
/*
ID
----------- ---- -----------
1 退货 5(1 行受影响)
*/
仅仅是猜测,不知是否符合楼主的需求.