表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。这种情况下为什么能查询到记录,谢谢。

解决方案 »

  1.   

    select 1,"退货",sum(amount) from aa where qty < 0。这种情况下为什么能查询到记录我也觉得奇怪.最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
    如果有多表,表之间如何关联?
    发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  2.   

    如果表里的所有qty都>0,那么
    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 行受影响)
    */
    仅仅是猜测,不知是否符合楼主的需求.
      

  3.   

    感谢qianjin036a答复,符合我的需求,结帖。