使用 Select 查询根据条件更改两个表的值
Using a Select query to change the Value for two tables depending on a condition
目标:我想创建一个 Select 查询,其中结果包含两个表中的所有记录,但时间段除外。除此之外,我希望有一个条件,如果停车分钟数为 0 或 Null,则该字段的值应设置为 -1。
进展:在目前的状态下,我合并了两个表,可以将0值设置为-1。由于我是 SQL 的新手,我找不到将原始值保留几分钟并集成 'When Null Then -1' 子句的解决方案。许多解决方案建议使用 Update query ,但操作需要在 Select 结果中。 MYSQL 2017. 这是我到目前为止的代码:
Select c.ID, c.status, c.Date, Case When c.Minutes = 0 Then -1 End as Minutes
From Customer_1 as c
Union
Select c1.ID, c1.status, c1.Date, Case When c1.Minutes = 0 Then -1 End as
Minutes
From Customer_2 as c1
原始数据集:我有两个列名完全相同的表,代表用户 ID
Customer_1:
ID| Date| Minutes| Time| status
1 | 2019| 3 | 2019| A
2 | 2019| 0 | 2019| A
Customer_2:
ID| Date| Minutes| Time| status
3 | 2019| Null | 2019| A
4 | 2019| 0 | 2019| A
最终查询应该是这样的:
ID| Date| Minutes| status
1 | 2019| 3 | A
2 | 2019| -1 | A
3 | 2019| -1 | A
4 | 2019| -1 | A
任何关于如何构建满足条件的工作查询的建议都将不胜感激!
只需使用 Coalesce()
函数并在 Case .. When
语句中添加 Else
部分即可:
Select ID, status, Date, Case When Coalesce(Minutes,0) = 0 Then -1 Else Minutes End as Minutes
From Customer_1
Union
Select ID, status, Date, Case When Coalesce(Minutes,0) = 0 Then -1 Else Minutes End
From Customer_2
并且在这种情况下对表使用别名是多余的,因为除了 Union
之外的查询是独立的。第二个查询的别名(Minutes
)也是多余的。
另一种选择可能是使用 IF
语句和 COALESCE()
函数:
Select ID, status, Date, IF(Coalesce(Minutes,0) , Minutes, -1) as Minutes
From Customer_1
Union
Select ID, status, Date, IF(Coalesce(Minutes,0) , Minutes, -1)
From Customer_2
目标:我想创建一个 Select 查询,其中结果包含两个表中的所有记录,但时间段除外。除此之外,我希望有一个条件,如果停车分钟数为 0 或 Null,则该字段的值应设置为 -1。
进展:在目前的状态下,我合并了两个表,可以将0值设置为-1。由于我是 SQL 的新手,我找不到将原始值保留几分钟并集成 'When Null Then -1' 子句的解决方案。许多解决方案建议使用 Update query ,但操作需要在 Select 结果中。 MYSQL 2017. 这是我到目前为止的代码:
Select c.ID, c.status, c.Date, Case When c.Minutes = 0 Then -1 End as Minutes
From Customer_1 as c
Union
Select c1.ID, c1.status, c1.Date, Case When c1.Minutes = 0 Then -1 End as
Minutes
From Customer_2 as c1
原始数据集:我有两个列名完全相同的表,代表用户 ID
Customer_1:
ID| Date| Minutes| Time| status
1 | 2019| 3 | 2019| A
2 | 2019| 0 | 2019| A
Customer_2:
ID| Date| Minutes| Time| status
3 | 2019| Null | 2019| A
4 | 2019| 0 | 2019| A
最终查询应该是这样的:
ID| Date| Minutes| status
1 | 2019| 3 | A
2 | 2019| -1 | A
3 | 2019| -1 | A
4 | 2019| -1 | A
任何关于如何构建满足条件的工作查询的建议都将不胜感激!
只需使用 Coalesce()
函数并在 Case .. When
语句中添加 Else
部分即可:
Select ID, status, Date, Case When Coalesce(Minutes,0) = 0 Then -1 Else Minutes End as Minutes
From Customer_1
Union
Select ID, status, Date, Case When Coalesce(Minutes,0) = 0 Then -1 Else Minutes End
From Customer_2
并且在这种情况下对表使用别名是多余的,因为除了 Union
之外的查询是独立的。第二个查询的别名(Minutes
)也是多余的。
另一种选择可能是使用 IF
语句和 COALESCE()
函数:
Select ID, status, Date, IF(Coalesce(Minutes,0) , Minutes, -1) as Minutes
From Customer_1
Union
Select ID, status, Date, IF(Coalesce(Minutes,0) , Minutes, -1)
From Customer_2