2017-01-25 42 views
0

我正在使用具有半「圖形」SQL報表編寫器的ERP。不同行的總和

我們軟件的工作方式是產品可以是「大師」或「成員」(或者兩者都不是,但現在讓我們忽略)。基本上,產品可以是一個組的「父母」或另一個產品組的「孩子」。所以說,你有如下表:

|---------------------|------------------|------------------| 
|  Product  | ProductMaster |  Quantity  | 
|---------------------|------------------|------------------| 
|   A   |     |  200  | 
|---------------------|------------------|------------------| 
|   A1   |   A  |  50  | 
|---------------------|------------------|------------------| 
|   A2   |   A  |  50  | 
|---------------------|------------------|------------------| 
|   A3   |   A  |  25  | 
|---------------------|------------------|------------------| 

產品A是法師,其他都是A的成員

我希望做的是有每個產品一行,結合了名人的數量和他們的所有成員(在這種情況下,與Quantity = 325一行),我無法弄清楚如何做到這一點。我可以通過將Group By ProductMaster添加到所有成員的總和中,但之後我被卡住了。

回答

1

假設只有一個深度的水平,你可以使用coalesce()

select coalesce(ProductMaster, Product) as ProductMaster, sum(Quantity) 
from t 
group by coalesce(ProductMaster, Product); 

注:這是假定空白意味着NULL。如果它意味着其他的東西,那麼你會想要一個CASE而不是COALESCE()

+0

謝謝戈登。通過一個層面的深度,你的意思是說,一個法師有一套成員,成員本身不能成爲主人?因爲是的,我相信是這樣。我會嘗試你的建議。 – wysiwyg

+0

而且工作。現在我必須弄清楚Coalesce究竟幹了什麼。謝謝! – wysiwyg