2014-11-01 75 views
0

我想獲得一列的總和,如果他們的ISBN是相同的,並且shipdate是空的。 Shipdate位於不同的表中,因此似乎「and 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 

需求是錯誤的,它是包括shipdates這不是空(未顯示)爲好。 需求應該是: 1, 基本數量爲其中ISBN相同

+0

你能展示一些數據樣本嗎?你的問題有點混亂。 – 2014-11-01 03:43:18

+0

@OP,你能解決這個問題嗎? – AdamMc331 2014-11-02 01:20:05

回答

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。這可能是你遇到的問題的一部分。