当前位置: 代码迷 >> Sql Server >> HAVING 使用中遇到小疑点
  详细解决方案

HAVING 使用中遇到小疑点

热度:74   发布时间:2016-04-24 10:04:43.0
HAVING 使用中遇到小问题
求救:表结构是,一张feeshet表,里面每个seq(序号)可能有多个消费条目,还有一张表是person(消费者),里面的seq就是单一的。现在我要查feeshet中一条记录都没有的消费者,或者是feeshet中有记录,但是消费金额为0的,其中feeshet中单价为price,数量为amout,退费后数量为0记录。为什么我这个语句什么都查不出来?
HAVING SUM(price*amount) is null or SUM(price*amount)=0.00

------解决方案--------------------
不加having时,返回的数据中有没有符合 SUM(price*amount) is null or SUM(price*amount)=0.00的数据?
------解决方案--------------------

select *
from (
select SUM(price*amount)[sum],COUNT(in_seq) [count]
from inusemed)a
where [sum] is null or [count]=0
------解决方案--------------------
person 表有而 feeshet 表中没有的 seq 不会在对 feeshet 表进行 GROUP BY 时在结果中多出来。
查询 feeshet 表就只针对 feeshet 表中出现的所有 seq 进行处理。
你的需求应该用
SELECT seq
  FROM person
 WHERE NOT EXISTS (SELECT *
                     FROM feeshet
                    WHERE feshet.seq = person.seq
                      AND ISNULL(price * amount, 0.00) <> 0.00)


又:
a)消费金额作为冗余字的存起来,查询时不用计算性能会好一点。
b)消费金额添为计算字段,查询语句写得方便、也更容易阅读。
------解决方案--------------------
引用:
person 表有而 feeshet 表中没有的 seq 不会在对 feeshet 表进行 GROUP BY 时在结果中多出来。
查询 feeshet 表就只针对 feeshet 表中出现的所有 seq 进行处理。
你的需求应该用
SELECT seq
  FROM person
 WHERE NOT EXISTS (SELECT *
                     FROM feeshet
                    WHERE feshet.seq = person.seq
                      AND ISNULL(price * amount, 0.00) <> 0.00)


又:
a)消费金额作为冗余字的存起来,查询时不用计算性能会好一点。
b)消费金额添为计算字段,查询语句写得方便、也更容易阅读。


这个比较高,不容易想到的查询条件
  相关解决方案