2014-09-21 81 views
1

我執行子查詢來識別我想要的行排除。那些是在列b上有NULL值的那些。 Parent Supplier Name。這工作正常,直到我試圖得到其餘的總和(b。Spend Value in LC)。LEFT JOIN和IS NULL工作但不是SUM功能

SELECT a.`BW Parent Number` , a.`Vendor Name` , b.`Parent Supplier Name` , sum(b.`Spend Value in LC`) as sum 
FROM scrubs a 
LEFT JOIN (

    SELECT `Child Supplier ID` , `Parent Supplier Name` , `Spend Value in LC` 
    FROM pdwspend 
    WHERE `BU ID` = 'BU_1' 
    AND `version` LIKE '%FINAL%' 
)b ON a.`BW Parent Number` = b.`Child Supplier ID` 

WHERE a.`year` =2014 
AND b.`Parent Supplier Name` IS NULL 
GROUP BY a.`BW Parent Number` 
ORDER BY sum(b.`Spend Value in LC`) DESC 

結果的願望有這樣的結構:

`BW Parent Number` | `Vendor Name` | `Parent Supplier Name` | sum 
BW0001    XYC     NULL    300,000 
..... 
..... 

現在我得到這個爲所有不包含在子查詢行:

`BW Parent Number` | `Vendor Name` | `Parent Supplier Name` | sum 
BW0001    XYC     NULL    NULL 
.... 
.... 

謝謝!

+0

顯示一些示例數據。 – Laurence 2014-09-21 22:24:31

+0

你可以試着'Sum(Coalesce(b。\'花在LC \'中的值,0))' – Siyual 2014-09-21 23:03:06

回答

0

像你之前這麼多的人,你已經受騙MySQL的非標準分組支持...

確保所有的非聚集列的group by條款中列出:

... 
GROUP BY a.`BW Parent Number`, a.`Vendor Name` 
... 

儘管如果你試過你查詢其他數據庫將rause SQL異常,MySQL允許你省略非聚集colums,在這種情況下,它返回一個單排隨機(作爲實用性的問題,它返回行)作爲編碼的每個唯一組。

+0

感謝您的回覆。我試過'GROUP BY a.'BW Parent Number',a.'Vendor Name';並且 ; ''GROUP BY a.'BW家長Number',a.'Vendor Name',b.'Parent供應商Name',b.'Child供應商ID'',沒有sucess。我知道這些行在LC上有b.'Spend Value的實際值。有任何建議嗎? – nangys 2014-09-22 00:04:52