2016-04-11 4 views
0

次のSQLの合計を調べようとしています。カウントサブカテゴリとメインカテゴリ基本項目

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が= 14のpidている見ることができるように。 12,15の量がその親に追加されます14

+0

何をしようとしていますか?そして期待される結果は何ですか(そのサンプルデータで)? – jarlh

+0

あなたの合計にはグループがありません、あなたの期待出力は? –

+0

更新を監視します。 plz – codeBloger

答えて

0

私はコメントで説明したように予想される出力が間違っていると思います。 14の場合、sumtotal1100である必要があります。

これは入手方法です。

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 | 
+-----+---------+---------------+---------+-----+ 
関連する問題