2016-04-11 12 views
0

ben sql aşağıdaki toplamını bulmaya çalışıyorum.Sayım Alt kategori ve ana kategorisi baz madde

Lütfen aşağıda kukla verileri bulun.

id amount is_sub pid 
12 200  1  14 
13 300  0  null 
14 400  0  null 
15 500  1  14 

Beklenen Sonuç:

id amount totelamount is_sub pid 
12 200  200  1  14 
13 300  300  0  null 
14 400  900  0  null 
15 500  500  1  14 

Eğer 12 ve 15 = 14 Pid gelmiş görebileceğiniz gibi. Yani 12 ve 15 miktarı

+0

? Ve beklenen sonuç nedir (bu örnek verilerle)? – jarlh

+0

senin toplamı sizin beklediğiniz çıkışı nedir, bir grup yok mu? –

+0

Güncellemeye dikkat edin. plz – codeBloger

cevap

0

14 Ben yorumunda açıklandığı gibi beklenen çıkışı yanlış olduğunu düşünüyorum kendi üst eklenecektir. 14 için, sumtotal1100 olmalıdır.

Bu şekilde alabilirsiniz.

SELECT m.id, 
     m.amount, 
     CASE 
      WHEN n.pid IS NULL THEN m.amount 
      ELSE n.sum_amount+m.amount 
     END AS total_amount, 
     m.is_sub, 
     m.pid 
FROM product m 
LEFT JOIN 
    (SELECT sum(p.amount) AS sum_amount, 
          p.pid 
    FROM product p 
    INNER JOIN product c ON p.pid=c.id 
    GROUP BY p.pid 
    ) n 
    ON m.id=n.pid 
ORDER BY m.id 

Açıklama

İç tablo n bu çıktıyı verecektir.

+------------+-----+ 
| SUM_AMOUNT | PID | 
+------------+-----+ 
|  700 | 14 | 
+------------+-----+ 

Sen çıkışı altına almak için product masaya ile katılabilir. Yapmanız çalıştığımız şey

+-----+---------+---------------+---------+-----+ 
| ID | AMOUNT | TOTAL_AMOUNT | IS_SUB | PID | 
+-----+---------+---------------+---------+-----+ 
| 12 |  200 |   200 |  1 | 14 | 
| 13 |  300 |   300 |  0 |  | 
| 14 |  400 |   1100 |  0 |  | 
| 15 |  500 |   500 |  1 | 14 | 
+-----+---------+---------------+---------+-----+