如何按示例将行拆分为两列?订单号对应CAD与Amend列技术问询
解决订单号拆分多行的问题
我明白你的痛点啦——现在同一个订单因为同时存在CAD Approved和Amendment Sent PartNo两种状态,被拆成了两行,而你想要每个订单对应一行数据,同时包含CAD列和Amend列对吧?其实你之前觉得CASE语句不可行,大概率是没结合聚合函数一起用,这恰恰是解决这个问题的关键!
核心思路
我们需要按订单号分组,然后用聚合函数(比如MAX/MIN)配合CASE语句,把不同状态下的对应值合并到同一行的不同列中。
示例SQL代码
假设你的原始数据表结构大致如下(如果和实际有出入,只需调整CASE里的判断条件即可):
- 表名:
order_status - 字段:
order_no(订单号)、status_type(状态类型,比如'CAD Approved'或'Amendment Sent PartNo')、status_content(状态对应的具体内容,比如审批时间、修订编号等)
对应的解决SQL:
SELECT order_no, -- 提取CAD Approved状态对应的内容,没有则返回NULL MAX(CASE WHEN status_type = 'CAD Approved' THEN status_content ELSE NULL END) AS CAD, -- 提取Amendment Sent PartNo状态对应的内容,没有则返回NULL MAX(CASE WHEN status_type = 'Amendment Sent PartNo' THEN status_content ELSE NULL END) AS Amend FROM order_status GROUP BY order_no;
代码解释
GROUP BY order_no:强制让数据库按订单号分组,确保每个订单最终只输出一行数据MAX(CASE ...):对于每个订单分组,找到匹配对应状态类型的记录,提取它的内容;如果该订单没有这个状态,就返回NULL。用MAX是因为同一订单同一状态类型通常只会有一条记录,聚合函数会直接取到唯一的那个值(用MIN也能达到同样效果)
这样处理后,不管订单有没有其中一种状态,都会以一行的形式展示,完美符合你的需求!
内容的提问来源于stack exchange,提问作者user1452574
相关产品推荐
相关产品推荐

