You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WHERE子句中CASE WHEN用法疑问及UNION语句优化咨询

关于WHERE子句中CASE WHEN的使用及简化UNION查询的问题

问题描述

我搞不懂WHERE子句里CASE WHEN的正确用法,试着写了下面的查询:

SELECT *
FROM Global_Sales
WHERE sales_org IN ('AM NEW ZEALAND', 'AM AUSTRALIA', 'AM MEXICO')
AND business_type IN (CASE WHEN sales_org IN ('AM MEXICO') THEN ('DIRECT SALES')
ELSE ('DIRECT SALES','INDIRECT SALES','INTERNATIONAL') END)

想问下这种写法行不行?

后来知道这么写不行,我就用UNION写了长查询,但这种场景太多了,想缩短代码、少用UNION:

SELECT *
FROM AM_SALE_GLOBAL
WHERE sorg IN ('AM NEW ZEALAND')
AND bus_type_cd In ('DIRECT SALES','INDIRECT SALES','INTERNATIONAL','OEM') 

UNION

SELECT *
FROM AM_SALE_GLOBAL
WHERE sorg IN ('AM MEXICO')
AND bus_type_cd In ('DIRECT SALES')

解决方案

  1. 你的CASE WHEN写法不可行
    CASE表达式只能返回单个标量值,没办法返回多个值组成的集合,所以在IN子句里这么写会报错,不符合语法要求。

  2. 不用UNION的简化写法
    直接把不同销售组织对应的业务类型规则用逻辑条件组合到同一个WHERE子句里,代码更简洁易维护:

SELECT *
FROM AM_SALE_GLOBAL
WHERE 
    (sorg IN ('AM NEW ZEALAND', 'AM AUSTRALIA') 
     AND bus_type_cd IN ('DIRECT SALES','INDIRECT SALES','INTERNATIONAL','OEM'))
    OR
    (sorg = 'AM MEXICO' AND bus_type_cd = 'DIRECT SALES')

如果后续要加更多销售组织的规则,直接扩展OR条件就行,比重复写UNION子查询高效得多。

内容的提问来源于stack exchange,提问作者beeehop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:12:41