一条SQL语句的写法。(很棘手,低手误入)

来源:百度知道 编辑:UC知道 时间:2024/09/20 12:21:06
图书管理系统数据库:
a 表 图书基本信息[bookid(书的ID),bookname(书名)];
b 表 进货单号 [ incaseid(单号),indate(时间)];
c 表 进货记录[incaseid(单号),bookid(书的ID),inrecordid(进货记录),innumber(进货数量)]
现有数据:
a表的基础资料有10W条
b表有今年所有的进货单号
c表的字段[进货数量]有 5.9.10.11.15.49
需要实现统计:
最近一个月内进货总数能被5整除的(书的ID)。
最近一个月内进货总数能被5整除的(书的ID)。

除了能被整除的能不能在包含进货总数 > 30 的,也就是 sum(innumber)> 30 的 bookid

总的条件就是([能被整除 或者 总数大于30] 的 bookid)

select c.bookid from b inner join c on b.incaseid=c.incaseid
where datediff(d,b.indate,getdate())<=30
group by c.bookid
having sum(c.innumber)%5=0 or sum(c.innumber)>30;

说明:
【datediff(d,b.indate,getdate())<=30】是查询和现在时间相差30天的数据。
【group by c.bookid】是按照bookid分组
【having sum(c.innumber)%5=0 or sum(c.innumber)>30】查询最近一个月内进货总数能被5整除的数据或者总数大于30的数据。

---
以上,希望对你有所帮助。

最近一个月,是指上月,还是本月啊

SELECT bookid FROM
(SELECT c.bookid, SUM(c.innumber) AS s FROM c INNER JOIN b ON c.incaseid = b.incaseid WHERE MONTH(b.indate) = MONTH(getdate()) AND YEAR(b.indate) = YEAR(getdate()) GROUP BY c.bookid) x WHERE x.s % 5 = 0

没那么复杂吧!
select bookid , sum(innumber)
from c, b
where c.incaseid = b.incaseid
and b.indate between ? and ?
group by bookid
having sum(innumber) % 5 == 0

select A.bookid from c as A , b as B where B.indate>"起始时间" and B.indate>"结束时间" and B.