【问题标题】:Create a column based on conditions in select statement根据 select 语句中的条件创建列
【发布时间】:2020-07-20 11:56:55
【问题描述】:

我在 Postgres 中有一个订单表,其中订单号和状态为列。如果下新订单,则默认状态为已下订单和已分配货物。

订购 12345

date        order  status
2020-06-01 12345 Goods Assigned
2020-06-01 12345 Order placed

订购 543223

date        order  status
2020-05-02 54321   Reached pickup hub
2020-05-01 54321  Goods Assigned
2020-05-01 54321  Order placed

我想知道订单是否从发件人处发出。因此,如果我们在“已下订单”和“已分配货物”之后有任何状态,我想创建一个名为“已启动”的列,其值为“是”。 Else No 如果在 Select 语句中只有以下两个条件

order Started
12345   No
54321  Yes

由于“已下订单”和“已分配货物”在所有订单中都可用,因此我无法使用 NOT IN 运算符。有没有其他方法可以得到报告。

【问题讨论】:

  • 如果一个订单有两个以上的条目,说“是”就足够了吗?
  • 在某些情况下,前两个状态可能会重复,例如“已下订单”“已下订单”

标签: sql postgresql group-by


【解决方案1】:

你可以使用聚合:

select order_id, bool_or(status not in ('Goods Assigned', 'Order placed')) is_started
from mytable
group by order_id

对于每个order_id,这会生成一个布尔标志,指示其状态是否具有除'Goods Assigned''Order placed' 以外的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多