如果他们的ISBN相同且shipdate为null,我正在尝试获取列的总和。 Shipdate位于不同的表中,因此似乎“和shipdate为空”部分未正确检查,实际上它们似乎都被视为非null,这是不正确的。
select oh.OrderNo, shipdate, qty, ISBN,
need = (select sum(qty)
from OrderDetail
where od.ISBN = ISBN and shipdate is null)
from orderheader oh
join orderdetail od on oh.OrderNo=od.OrderNo
where shipdate is null
我尝试了另一种方法
need = (select sum(case when shipdate is null then qty else 0 end)
from OrderHeader where shipdate is null and od.ISBN = ISBN),
但它有一个外部引用,所以它不起作用。非常感谢任何帮助。
编辑:示例
OrderNo shipdate qty ISBN need
7 NULL 1 0030615372 1
7 NULL 1 0345350499 11
9 NULL 1 0345350499 11
10 NULL 4 0345350499 11
10 NULL 2 0395851580 8
10 NULL 3 0395851580 8
7 NULL 1 0439136350 9
7 NULL 1 0887251714 1
需要是错误的,它包括非空(未显示)的发货日期。 需要应该是: 1 6 6 6 五 五 1 1, 基本上是ISBN相同的数量的总和
答案 0 :(得分:1)
只需使用SUM()聚合函数,而不是使用子查询来获取总和。假设您正确加入表格,这将有效。没有看到你的桌面设计和一些样本数据很难测试,但我想象这样:
SELECT oh.orderno, od.shipdate, od.isbn, SUM(od.qty) AS need
FROM orderdetail od
JOIN orderheader oh ON oh.orderno = od.orderno
WHERE od.shipdate IS NULL
GROUP BY isbn
您需要按ISBN分组才能获得该ISBN的正确总和。这可能是你遇到的问题的一部分。