mysql 基于SQL中的自定义字段创建新列

bq9c1y66  于 2023-01-25  发布在  Mysql
关注(0)|答案(1)|浏览(131)

因此,我尝试根据我的一个列的结果创建一个新列,但在根据我的一些当前结果及其条件创建新列时遇到了问题。
我的数据现在是这样的-
| 人数|姓名|日期|现况|
| - ------|- ------|- ------|- ------|
| 小行星一七八九|布兰登|二○二一年十二月二十日|待定|
| 小行星一七八九|布兰登|二○二一年十二月二十二日|核准|
| 小行星1553|杰克|2021年5月10日|核准|
| 小行星1553|杰克|2021年11月10日|取消|
| 一九九七年|史密斯|2021年8月9日|核准|
| 一九九七年|史密斯|2021年9月11日|转移|
| 1338|詹姆斯|2021年5月11日|核准|
| 1338|詹姆斯|2021年11月10日|取消|
| 一九九四年|施蒂希|2021年8月9日|待定|
| 一九九四年|施蒂希|2021年9月11日|核准|
| 小行星一七七八|勒鲁瓦|2021年8月9日|核准|
| 小行星一七七八|勒鲁瓦|2021年9月11日|转移|
这是我现在的密码

SELECT a.Number, 
CASE WHEN a.Status = 'Approved' and  a.Status = 'Canceled' or a.Status = 'Transferred' 
THEN
(SELECT MAX(b.Name) 
FROM Internal_Table b 
WHERE a.Number = b.Number
AND b.Status != 'Canceled'
or b.Staus != 'Transfered'
HAVING MAX(b.Date) 
) 
ELSE a.Status END AS Final_Status, 
a.Date,
a.Name 
FROM Internal_Table a

我尝试实现的目标是创建一个新列,显示"Approved/Canceled"、"Approved/Transfered"。但仅当"Approved"日期后显示"Canceled"或"Transfered"状态时。我不太熟悉使用CASE,因此这是我当前的尝试。抱歉,造成任何混淆。这是我希望结果的外观=
| 人数|姓名|日期|现况|最终统计|
| - ------|- ------|- ------|- ------|- ------|
| 小行星一七八九|布兰登|二○二一年十二月二十日|待定||
| 小行星一七八九|布兰登|二○二一年十二月二十二日|核准||
| 小行星1553|杰克|2021年5月10日|核准|批准/取消|
| 小行星1553|杰克|2021年11月10日|取消|批准/取消|
| 一九九七年|史密斯|2021年8月9日|核准|批准/转移|
| 一九九七年|史密斯|2021年9月11日|转移|批准/转移|
| 1338|詹姆斯|2021年5月11日|核准|批准/取消|
| 1338|詹姆斯|2021年11月10日|取消|批准/取消|
| 一九九四年|施蒂希|2021年8月9日|待定||
| 一九九四年|施蒂希|2021年9月11日|核准||
| 小行星一七七八|勒鲁瓦|2021年8月9日|核准|批准/转移|
| 小行星一七七八|勒鲁瓦|2021年9月11日|转移|批准/转移|

smdncfj3

smdncfj31#

您应该从修复表开始,以便将日期存储为日期而不是字符串。
应该可以-

SELECT b.*, t.final_stats
FROM Internal_Table b
LEFT JOIN (
    SELECT
        Number,
        GROUP_CONCAT(DISTINCT IF(Status IN ('Approved', 'Canceled', 'Transferred'), Status, null) ORDER BY STR_TO_DATE(Date, '%m/%d/%Y') SEPARATOR '/') final_stats
    FROM Internal_Table
    GROUP BY Number
    HAVING final_stats IN ('Approved/Canceled', 'Approved/Transferred')
) t ON b.Number = t.Number;

相关问题