mysql - 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) 但是没有得到想要的输出。我不明白我出了什么问题。谁能帮我 ?
解决方案
- 您只需要做一个
Left Join
从new_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
推荐阅读
- ecmascript-6 - 转译 node-fetch 要求返回错误
- javascript - 如何使用 for 循环或数组填充 angularjs 列表?
- phaser-framework - 我怎样才能只放一次炸弹,直到它在物理街机池中爆炸?
- sql - SQL 左连接日期过滤器
- microsoft-graph-api - 用于多个用户的 Graph API Calendar getSchedule
- python-3.x - 重新安装python CentOS8,错误:找不到平台独立库
- c# - 如何将项目添加到 DataGridView 并在输入后自动对其进行排序?
- facebook - Facebook 开发者账户变更
- hammerspoon - 在 Hammerspoon 中,如何打开应用程序并传入启动参数
- javascript - 在 TypeScript 中声明递归方法链