2016-09-07 47 views
0

我已經卡住在mysql上創建視圖。 我有3個表:從具有特定條件的VIEW SQL上的三個表JOIN和SUM

PRICE_LIST

+----------+-----------+ 
| id_price | price_name| 
+----------+-----------+ 
| 11  | retail | 
| 12  | agen  | 
| 13  | subagen | 
| 14  | distro | 
+----------+-----------+ 

basic_price

+------------+-------------+ 
| id_product | basic_price | 
+------------+-------------+ 
| 1001  | 1000  | 
| 1002  | 2000  | 
| 1003  | 3000  | 
| 1004  | 4000  | 
+------------+-------------+ 

margin_price

+----------+------------+-------------+ 
| id_price | id_product | margin_price| 
+----------+------------+-------------+ 
| 11  | 1001  | 100   | 
| 12  | 1001  | 200   | 
| 13  | 1001  | 300   | 
| 14  | 1001  | 400   | 
| 11  | 1002  | 200   | 
| 12  | 1002  | 300   | 
| 13  | 1002  | 400   | 
| 14  | 1002  | 500   | 
| 11  | 1003  | 300   | 
| 12  | 1003  | 400   | 
| 13  | 1003  | 500   | 
| 14  | 1003  | 600   | 
| 11  | 1004  | 400   | 
| 12  | 1004  | 500   | 
| 13  | 1004  | 600   | 
| 14  | 1004  | 700   | 
+----------+------------+-------------+ 

現在,我想打一個VIEW和SUM與margin_price列basic_price列,看起來像這樣:

+----------+-----------+------------+----------+-------------+------------+ 
|id_product|basic_price|retail_price|agen_price|subagen_price|distro_price| 
+----------+-----------+------------+----------+-------------+------------+ 
| 1001  | 1000  | 1100  | 1200  | 1300  | 1400  | 
| 1002  | 2000  | 2200  | 2300  | 2400  | 2500  | 
| 1003  | 3000  | 3300  | 3400  | 3500  | 3600  | 
| 1004  | 4000  | 4400  | 4500  | 4600  | 4700  | 
+----------+-----------+------------+----------+-------------+------------+ 

我該怎麼辦,你可以給這個問題的代碼解決方案?

+0

哪裏retail_price,agen_price,subagen_price,distro_price可用? – Backtrack

回答

1
select 
    bp.id_product, 
    bp.basic_price, 
    SUM(CASE 
     WHEN pl.price_name='retail' THEN mp.margin_price ELSE 0 
     END) as retail_price 
    SUM(CASE 
     WHEN pl.price_name='agen' THEN mp.margin_price ELSE 0 
     END) as agen_price, 
    SUM(CASE 
     WHEN pl.price_name='subagen' THEN mp.margin_price ELSE 0 
     END) as subagen_price, 
    SUM(CASE 
     WHEN pl.price_name='distro' THEN mp.margin_price ELSE 0 
     END) as distro_price 
from basic_price bp 
    join margin_price mp on bp.id_product=mp.id_product 
    join price_list pl on mp.id_price =pl.id_price 
GROUP by bp.id_product 
0
SELECT 
    A.id_product, 
    A.basic_price, 
    SUM(CASE WHEN C.id_price = 11 THEN A.basic_price + B.margin_price ELSE 0 END) AS retail_price, 
    SUM(CASE WHEN C.id_price = 12 THEN A.basic_price + B.margin_price ELSE 0 END) AS agen_price, 
    SUM(CASE WHEN C.id_price = 13 THEN A.basic_price + B.margin_price ELSE 0 END) AS subagen_price, 
    SUM(CASE WHEN C.id_price = 14 THEN A.basic_price + B.margin_price ELSE 0 END) AS distro_price 
    FROM basic_price A 
    JOIN margin_price B ON A.id_product = B.id_product 
    JOIN price_list C ON C.id_price = B.id_price 
    GROUP BY A.id_product, A.basic_price