繁体   English   中英

使用特定条件从VIEW SQL的三表中进行JOIN和SUM

[英]JOIN and SUM from Three Table on VIEW SQL with specific criteria

我被卡在mysql上创建视图。 我有3张桌子:

价格表

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

基本价格

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

保证金价格

+----------+------------+-------------+
| 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         |
+----------+------------+-------------+

现在,我想对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       |
+----------+-----------+------------+----------+-------------+------------+

我该怎么办,您能为这个问题提供代码解决方案吗?

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
  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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM