SQL 合并一个表中的字段

Posted

技术标签:

【中文标题】SQL 合并一个表中的字段【英文标题】:SQL Combining fields in one table 【发布时间】:2020-03-22 13:37:18 【问题描述】:

有一个显示两个表格的脚本。 String 类型的名称和 Long 类型的计数。 如何将相同的字段“缺货”合并到一个字段中,将“婚姻”、“重新排序”字段合并到一个字段中的“婚姻/重新排序”中。这样做时,保存两个表的类型,并在新字段中获取组合值。以及如何不显示额外的字段,例如员工表格等。 我知道您可以使用 CASE、WHEN、THEN 结构。但我不明白如何在我的脚本中正确描述它。

SELECT rl.reason AS reject_reason, COUNT(*)
FROM
    mp.reservation_log AS rl
    JOIN
    mp.store AS st ON rl.store_id = st.md_id
    JOIN mp.order_item oi ON oi.reserve_id=rl.reservation_id
    JOIN mp.sku s ON s.id=oi.item_id
    JOIN mp.product p ON p.id=s.product_id
WHERE rl.created_at > DATE(NOW()) - INTERVAL 1 MONTH AND rl.is_successful=0
GROUP BY rl.reason;

表格示例:

table example

【问题讨论】:

样本数据和期望的结果将有助于您的问题变得有意义。您的查询中没有任何内容被称为“婚姻”或“缺货”或其他任何内容,因此完全不清楚您指的是什么。此外,您的第一句话说“两个表”,但您的查询引用了 五个 更多表是的,我附上了需要更改的输出。注意这一点。 即使在您附加输出之后(不要在图片中这样做!),目前还不清楚您对问题Nothing in your query is called "marriage" or "out of stock" or whatever, so it is totally unclear what you are referring to.的答案是什么 我从表格中得到这些字段的原因,是不是更清楚了? 【参考方案1】:

似乎您想将多个原因组合在同一个组中。

您可以为此使用 case 表达式作为非聚合列,如下所示:

select
    case 
        when r1.reason in ('marriage', 're-sorting') then 'marriage/re-sorting'
        else r1.reason
    end real_reason,
    count(*) cnt
from ...
where rl.created_at > current_date - interval 1 month and rl.is_successful = 0
group by real_reason

旁注:DATE(NOW()) 最好写成 CURRENT_DATE 。

【讨论】:

你能帮我把这个和我的要求结合起来吗?我经常犯很多错误 @skydogs:您只需将我的答案中的... 替换为您的from 子句(包括joins)。

以上是关于SQL 合并一个表中的字段的主要内容,如果未能解决你的问题,请参考以下文章

sql合并两张表(表字段不一致)到一张新表中

SQL中,如何将三个表中同一字段中的内容汇总到一个字段中?

SQL:如何将一个表中某个字段的值全部更新到另外一个表相应的字段

SQL怎么写将表中的字段设置为主键后,由该表的另外一个字段作为外键.

如何更新oracle表中的分区字段

ARCMAP 如何将一个属性字段前两位批量去掉?