当前位置: 首页 > 面试题库 >

将新列添加到结果并合并表

潘宸
2023-03-14
问题内容

CREATE TABLE logistics (
id int primary key,
campaign VARCHAR(255),
event_type VARCHAR (255),
date_offered VARCHAR (255),
date_ordered DATE,
date_delivered DATE,
date_recorded DATE,
date_completed DATE,
quantity VARCHAR(255)
);

INSERT INTO logistics
(id, campaign, event_type, 
date_offered, date_ordered,
date_delivered, date_recorded, date_completed,
quantity
)
VALUES 
("1", "C001", "offered", "2019-04-10", NULL, NULL, NULL, NULL, "500"),
("2", "C001", "ordered", NULL, "2019-04-16", NULL, NULL, NULL, "450"),
("3", "C001", "stored", NULL, NULL, "2019-04-18", "2019-05-20", NULL, "465"),

("4", "C002", "offered", "2019-08-14", NULL, NULL, NULL, NULL, "700"),
("5", "C002", "ordered", NULL, "2019-09-04", NULL, NULL, NULL, "730"),
("6", "C002", "stored", NULL, NULL, "2019-09-15", "2019-09-18", "2019-09-19", "800");

我想运行一个查询:

a)sub_event_type在上面的表中添加一个新列,并且
b)coalesce该表所有date values都在一个列中,称为event_date

结果应如下所示:

campaign     event_type      sub_event_type     event_date         quantity
C001         offer           NULL               2019-04-10          500
C001         order           NULL               2019-04-16          450
C001         stored          delivered          2019-04-18          465
C001         stored          recorded           2019-05-20          465
C002         offer           NULL               2019-08-14          700
C002         order           NULL               2019-09-04          730
C002         stored          completed          2019-09-15          800
C002         stored          delivered          2019-09-18          800
C002         stored          recorded           2019-09-19          800

为了实现这一点,我尝试使用以下查询:

SELECT
id,
campaign,
event_type,

 (CASE
  WHEN event_type = "stored" AND date_delivered IS NOT NULL THEN "delivered"
  WHEN event_type = "stored" AND date_recorded IS NOT NULL THEN "recorded"
  WHEN event_type = "stored" AND date_completed IS NOT NULL THEN "completed"
  END) AS sub_event_type,

coalesce(date_offered, date_ordered, date_delivered, date_recorded, date_completed) as event_date,
quantity
FROM logistics;

但是,此查询仅显示sub_event_type delivered在结果中。
我假设此问题的原因在于,event_type stored所有date值都在一行中,在中,event_types
offered并且stored它们在两个单独的行中。

我必须如何html" target="_blank">修改查询才能获得预期的结果?


问题答案:

我认为您需要union all

select id, campaign, event_type, 'delivered' as sub_event_type, date_delivered
from logistics
where event_type = 'stored' and date_delivered is not null
union all
select id, campaign, event_type, 'recorded' as sub_event_type, date_recorded
from logistics
where event_type = 'stored' and date_recorded is not null
union all
select id, campaign, event_type, 'completed' as sub_event_type, date_completed
from logistics
where event_type = 'stored' and date_completed is not null
union all
select id, campaign, event_type, null as sub_event_type, date_offered
from logistics
where event_type = 'offered' 
union all
select id, campaign, event_type, null as sub_event_type, date_ordered
from logistics
where event_type = 'ordered' ;


 类似资料:
  • 问题内容: 我的MySQL表具有以下结构: 我想将以上三列合并为一列,如下所示: 我想将此“组合”列添加到表的末尾而不破坏原始的3个字段。 问题答案: 创建列: 更新当前值: 自动更新所有未来值:

  • 在PostgreSQL中,我想使用SQL语句合并两列并从中创建一个新列。 我正在考虑使用concat(…) ,但有更好的方法吗<最好的方法是什么?

  • 问题内容: 我正在尝试将pandas Dataframe(orders_df)中的两个现有列相乘- 价格(股票收盘价)和Amount(股票数量),并将计算结果添加到名为“值”的新列中。由于某些原因,当我运行此代码时,“值”列下的所有行均为正数,而某些行应为负数。在DataFrame的“操作”列下,有七行带有“出售”字符串,七行带有“购买”字符串。 请让我知道我在做什么错! 问题答案: 如果我们愿意

  • 我有一个价格对象,它有两个属性,成本和税。我希望能够流式处理价格对象列表,将成本和税收相加,然后汇总总数。 有没有办法在Java8流中完全做到这一点?我正在考虑这样的逻辑:

  • 问题内容: 我正在用SSRS编写一份报告。该数据集填充有MS SQL Server的SQL查询。它使用Union All查询几个相似的表。问题是有一些信息丢失。不同的表适用于不同的工作站点,但是这些表中的任何列都没有站点名称。标识站点的唯一方法是通过表名。在“全部合并”的结果的合并列中,无法分辨出哪些行来自哪个站点。 有没有一种方法可以更改我的查询以在结果中添加一列,该列将具有与每一行相关联的工作

  • 问题内容: 我非常确定应该有一种更Python化的方法来执行此操作-但我想不起来:如何将二维列表合并到一维列表中?有点像zip / map,但是有两个以上的迭代器。 示例-我有以下列表: 我希望有 到目前为止,我想出的是: 但这对我来说似乎不是很优雅/ Pythonic。除了不检查2D数组中的所有“线”是否都具有相同的长度,可以相互添加等等之外,还有什么更好的方法呢? 问题答案: