2016-01-21 64 views
0

我有两个表。第一个包含产品代码,第二个产品代码和数量。总结值即使它们不存在于第二个表

现在我想总结为每个产品代码的所有分位数甚至有不是所有的产品在第二个表。 输出应该是产品代码和每个代码的总量,并为他们没有让数量它的代码为0

 
**Table1** 
productName | 
-------------- 
    a  | 
    b  | 
    c  | 
    d  | 
    e  | 

**Table2** 
productName | QTY | 
---------------------- 
    a  | 3 | 
    b  | 4 | 
    a  | 1 | 
    b  | 2 | 
    c  | 1 |  

**Output**  
productName | QTY | 
---------------------- 
    a  | 4 | 
    b  | 6 | 
    c  | 1 | 
    d  |  | 
    e  |  |  
SELECT tbl1.productname, SUM(tbl2.qty) AS TotQTY 
FROM tbl1 
INNER JOIN tbl2 ON tbl1.productname = tbl2.productname 
group by tbl1.productname 

这是我在SQL Fiddle

我尝试只能得到数量记录,但其他不显示。

+0

Sqlfiddle不适合我(只是挂)工作,但听起来像你需要一个左外部JOIN – Kickstart

+0

我不知道今天有什么问题,用sqlfiddle ..用LEFT OUTER JOIN它只返回我没有qauntity的记录。 – Josef

+0

啊,SQLfiddle醒了。在SQLfiddle中,您省略了GROUP BY子句。您还检查了_WHERE Table2.productName IS NULL_,它将排除在table2上有数量的任何行。 – Kickstart

回答

1
SELECT Table1.productName,COALESCE(SUM(Table2.qty),0) AS TotQTY 
FROM Table1 
LEFT JOIN Table2 ON Table1.productName = Table2.productName 
group by Table1.productName 
+1

它将显示零而不是显示空。 –

1
SELECT Table1.productName, SUM(Table2.qty) AS TotQTY 
FROM Table1 
LEFT JOIN Table2 ON Table1.productName = Table2.productName 
group by Table1.productName 
+0

这适用,但仅适用于有数量的代码。我想包括所有记录。在我的第一篇文章中看到我想要的输出类型。 – Josef

+1

它显示所有记录。请检查一次。 –

1

这似乎是你想要什么: -

SELECT Table1.productName, COALESCE(SUM(Table2.qty),0) AS TotQTY 
FROM Table1 
LEFT JOIN Table2 ON Table1.productName = Table2.productName 
GROUP BY Table1.productname 

SQLfiddle: -

http://sqlfiddle.com/#!9/619228/3

相关问题