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
子句(包括join
s)。以上是关于SQL 合并一个表中的字段的主要内容,如果未能解决你的问题,请参考以下文章
SQL:如何将一个表中某个字段的值全部更新到另外一个表相应的字段