我有三张table-
书籍-
BookNo BookName BookType
123 ABC 1
555 XYZ 0
搁板
Shelf ShelfNo BookNo BookQuantity
XB XB01 123 5
XB XB02 555 3
XB XB03 123 8
已出版图书
ShelfNo BookName IssuedDate QuantityIssued
XB01 ABC 11/21/2022 2
XB02 XYZ 11/20/2022 1
XB03 ABC 11/21/2022 5
我的目标是找出我们拥有的图书库存总数。输出应该按图书分组。我必须合并所有包含同一本书的shelfNo
,并将它们的Shelf.BookQuantity
相加,然后将其添加到该特定图书的BooksIssued.QuantityIssued
中。Booktype
应该显示为0的儿童和1的成人。
例如,
输出量
BookNo BookName BookType Total Stock
123 ABC adults 20 //(5+8+2+5)
555 XYZ children 4 //(3+1)
到目前为止,我已经写了这个。我知道我在查询中选择了比输出格式中提到的多的列。这是因为我是一步一步地理解流程的。我想首先按图书对数据分组,然后对数量求和,但它不是按图书编号对数据分组。它也不是对bi.quantityissued
求和。
select s.bookno, b.booktype, s.shelfno, b.bookname, s.bookquantity,
sum(bi.quantityissued), bi.issueddate
from Shelf s
left outer join BooksIssued bi on s.shelfno = bi.shelfno
left outer join Books b on s.bookno=b.bookno
where s.shelf = 'XB'
and bi.issueddate between '11/01/2022' and '11/07/2022'
group by s.bookno, s.shelfno, b.booktype, b.bookname, s.bookquantity, bi.issueddate
请指导我下一步该怎么做,谢谢。
2条答案
按热度按时间fcg9iug31#
这应该可以做到:
这也显示了
BooksIssued
表应该使用BookNo
而不是BookName
的原因之一(* 多个 * 中的一个):这样你就保存找个帮手了我们也可以用嵌套的
SELECT
查询来代替公共表表达式(CTE),但我发现CTE更容易推理:这仍然缺少
adults
与children
book类型。您可以使用CASE
表达式或使用 Table Value Constructor 来修复此问题。在这里我更喜欢后者,因为随着时间的推移,您可以以一种有效的方式添加更多类型,并且因为它为您最终使用一个真实的的表做好了准备,而这正是您一开始就应该拥有的:uujelgoq2#
试试这个: