获得两个表的选择总和?

时间:2014-11-01 03:40:17

标签: sql

如果他们的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相同的数量的总和

1 个答案:

答案 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的正确总和。这可能是你遇到的问题的一部分。