2016-04-11 2 views
0

Я стараюсь, чтобы найти сумму следующих sql.Count Подкатегория Основной пункт

SELECT SUM('amount') AS Amount, 
     CASE amount WHEN(IS_SUB=1) THEN 
        (SELECT SUM(amount) AS amo 
        FROM product 
        WHERE id=Pid) + SUM('amount') 
      ELSE SUM('amount') 
     END AS totalamount 
FROM product 
ORDER BY totalamount DESC 

Приведенные ниже фиктивные данные приведены ниже.

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

Ожидаемый результат:

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 

Как вы можете видеть, 12 и 15 имеют PID = 14. Таким образом, сумма 12 и 15 будет добавлена ​​к ее материнской компании. 14

+0

Что вы пытаетесь сделать? И каков ожидаемый результат (с данными образца)? – jarlh

+0

Ваша сумма не имеет группы, каков ваш ожидаемый результат? –

+0

Следите за обновлениями. plz – codeBloger

ответ

0

Я думаю, что ожидаемый результат неправильный, как я объяснил в комментарии. Для 14, sumtotal должно быть 1100.

Вот как вы можете это получить.

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 

Объяснение

Внутренняя таблица n даст этот вывод.

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

Вы можете присоединиться к нему с product столом, чтобы получить ниже выхода.

+-----+---------+---------------+---------+-----+ 
| 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 | 
+-----+---------+---------------+---------+-----+ 
Смежные вопросы