SQL查询如何保留无销售员订单逗号标识,将销售员ID替换为全名
修改后可直接使用的查询语句
假设存储员工信息的表名为employees,员工ID字段为employee_id,姓名字段为first_name(名)、last_name(姓),如果实际表名、字段名不同可自行替换对应部分:
SELECT NVL(e.first_name || ' ' || e.last_name, ',') AS "Emp Name", RPAD(to_char(SUM(i.quantity * i.unit_price),'$999,999,999.99'), 16, ' ') AS "Total Sale" FROM orders o INNER JOIN order_items i ON i.order_id = o.order_id LEFT JOIN employees e ON o.salesman_id = e.employee_id WHERE -- 保留无销售员的订单,排除姓氏以y结尾的销售员,不使用LIKE运算符 e.employee_id IS NULL OR LOWER(SUBSTR(e.last_name, -1)) != 'y' GROUP BY o.salesman_id, e.first_name, e.last_name HAVING SUM(i.quantity * i.unit_price) > 4000000.00 ORDER BY 2 DESC;
核心改动说明
- 新增
LEFT JOIN employees左连接逻辑:确保没有对应销售员的订单不会被过滤,可继续保留逗号标识 - 替换销售员展示逻辑:匹配到销售员时直接输出全名,未匹配到时输出逗号,和原有标识规则完全一致
- 实现禁用LIKE的过滤规则:用
SUBSTR取姓氏最后一位判断是否为y,同时额外保留销售员ID为空的记录不被过滤 - 调整分组规则:新增员工姓名字段到分组条件中,符合SQL语法要求
内容的提问来源于stack exchange,提问作者oharujyu
相关产品推荐
相关产品推荐

