【发布时间】:2022-01-17 19:37:35
【问题描述】:
我的报告看起来像这样:
| numberOrder | timestamp | id | status |
|---|---|---|---|
| 12 | 2021-06-23-14.00.00.232425 | 11 | done |
| 12 | 2021-06-30-18.00.00.224525 | 22 | done |
| 12 | 2021-07-01-01.00.00.224525 | 23 | done |
| 12 | 2021-08-01-01.00.00.224525 | 25 | cancel |
这是通过 SQL 完成的:
SELECT numberOrder, timestamp, id, status
from order
where status <> 'cancel'
order by id
fetch first row only
结果返回:
| numberOrder | timestamp | id | status |
|---|---|---|---|
| 12 | 2021-06-23-14.00.00.232425 | 11 | done |
如果我没有 2 个或更多订单,如何仅在同一查询中生成取消订单。如果我只有一个订单并且状态为取消(未完成订单)。结果仅显示取消的订单。但是如果我有超过 2 个订单(orders1:done,orders2:done 和 orders3 = cancel)结果应该只有 orders1:done。
报告:
| numberOrder | timestamp | id | status |
|---|---|---|---|
| 12 | 2021-06-23-14.00.00.232425 | 11 | cancel |
SELECT numberOrder, timestamp, id, status
from order
where (status <> 'cancel' or status = 'cancel') -- always true the condition
order by id
fetch first row only
结果:
| numberOrder | timestamp | id | status |
|---|---|---|---|
| 12 | 2021-06-23-14.00.00.232425 | 11 | cancel |
【问题讨论】:
-
order by id, case when status = 'cancel' then 2 else 1 end -
“如果我没有 2 个或更多订单”是什么意思?这是否意味着,对于某些
numberOrder,您必须在以下行中获得不超过1条id最小的记录:status <> 'cancel'(如果存在),status = 'cancel',如果没有status <> 'cancel'的行?如果不是,请解释为什么带有id=11的行得到status='cancel',如果它在您的示例数据中有status='done'。 -
我的意思是如果我有订单:完成、完成和取消,我只显示完成。但是,如果报告只有取消订单而不是完成订单,我将只显示取消订单
标签: sql database select db2 conditional-statements