【发布时间】:2020-10-11 16:06:28
【问题描述】:
目标:我想创建一个 Select 查询,其中结果包含两个表中的所有记录,但时隙除外。除此之外,我还想要一个条件,如果停车分钟数为 0 或 Null,则该字段的值应设置为 -1。
进度:在当前状态下,我合并了两个表,可以将 0 值设置为 -1。由于我对 SQL 很陌生,我找不到将原始值保留几分钟并集成“When Null Then -1”子句的解决方案。许多解决方案建议使用 Update 查询,但操作需要在 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
客户_1:
ID| Date| Minutes| Time| status
1 | 2019| 3 | 2019| A
2 | 2019| 0 | 2019| A
客户_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 语句安装到两个 Select 语句中,并将所有 Null 和 0 值交换为 -1,但为第一个用户消除了值 3。不幸的是,这与我在任务中遇到的问题相同。如果我在列上运行操作,我会丢失原始值 3。不知何故,我需要一个操作,让值高于 0 的用户保持其原始值。
-
我认为您仍然缺少 CASE 子句的 ELSE 部分,即如 Barbaros 的回答中所述的
Case When Coalesce(c.Minutes, 0) = 0 Then -1 Else c.Minutes End..