首页 > 解决方案 > MySQL相同的列连接不同的行

问题描述

我有两个与项目相关的表如下

表,“旧项目”

+------------+----------+--------------+----------+
| project_no | project  |    amount    |  status  |
+------------+----------+--------------+----------+
|        001 | project1 |   75,000.00  | original |
|        002 | project2 |   32,000.00  | original |
|        003 | project3 |  150,000.00  | original |
|        004 | project4 |   25,000.00  | original |
|        005 | project5 |   45,000.00  | original |
|        006 | project6 |   80,000.00  | original |
+------------+----------+--------------+----------+

表,“新项目”

+----------------+------------+-----------+--------------+----------+
| old_project_no | project_no |  project  |    amount    |  status  |
+----------------+------------+-----------+--------------+----------+
|                |        001 | project1  |   75,000.00  | original |
|                |        002 | project2  |   32,000.00  | original |
|                |        003 | project3  |  150,000.00  | original |
|            001 |        004 | project4  |   50,000.00  | revised  |
|                |        005 | project5  |   45,000.00  | original |
|            003 |        006 | project6  |   70,000.00  | revised  |
+----------------+------------+-----------+--------------+----------+

02) 如果一个项目在 new_project_table 中有 old_project_no 和 status = "revised",则金额字段应更改如下:

例如:- a) project_no 004 的数量 = old_project 表中 project_no 001 的数量 - new_project 表中 project_no 004 的数量

b) project_no 006 的数量 = old_project 表中 project_no 003 的数量 - new_project 表中 project_no 006 的数量

03)之后,通过连接两个表,所需的输出应如下所示:

+------------+-----------+--------------+----------+
| project_no |  project  |    amount    |  status  |
+------------+-----------+--------------+----------+
|        001 | project1  |   75,000.00  | original |
|        004 | project4  |   50,000.00  | revised  |
|        003 | project3  |  150,000.00  | original |
|        006 | project6  |   70,000.00  | revised  |
+------------+-----------+--------------+----------+

04)所以,我使用了以下查询

SELECT
    project_no,
    project,
    old_project.amount - new_project.amount,
    status
FROM
    new_project
JOIN
    old_project ON old_project.project.no = new_project.project.no
WHERE
    project_no IN (SELECT project_no
                   FROM new_project
                   WHERE status="revised") 

05) 但是没有得到想要的输出。我不明白我出了什么问题。谁能帮我 ?

标签: mysql

解决方案


  • 您只需要做一个Left Joinnew_project表到old_project表上的表project_no
  • 现在,我们可以使用Case .. When表达式来有条件地评估金额值。
  • 如果有对应的旧项目(旧项目金额Is Not Null),我们可以计算差额;否则使用新的项目金额。

尝试以下查询:

SELECT
  np.project_no, 
  np.project, 
  CASE 
    WHEN op.amount IS NOT NULL THEN op.amount - np.amount 
    ELSE np.amount
  END AS amount, 
  np.status 
FROM new_project AS np 
LEFT JOIN old_project AS op ON op.old_project_no = np.project_no 

推荐阅读