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

如何使用CASE对UNION查询结果进行分类?

给UNION合并结果添加分类列的解决方案

你当前的查询通过UNION合并了两类数据:喜欢Contemporary风格的客户,以及擅长该风格的艺人。要新增一列区分每条数据是客户还是艺人,不需要用CASE语句,直接在两个SELECT分支里分别添加固定值的列即可——因为每个分支的数据源本身就明确了类型。

修改后的完整SQL代码如下:

-- 先查询出Contemporary风格的StyleID,避免重复子查询
WITH StyleCTE AS (
    SELECT StyleID FROM musical_styles WHERE StyleName = 'Contemporary'
)
SELECT DISTINCT
    CustomerID AS 'ID', 
    CustFirstName AS 'List',
    'customer' AS 'Type' -- 新增客户类型标识
FROM
    customers
WHERE
    CustomerID IN (
        SELECT DISTINCT CustomerID
        FROM musical_preferences
        WHERE StyleID = (SELECT StyleID FROM StyleCTE)
    ) 
UNION 
SELECT DISTINCT
    EntertainerID AS 'ID', 
    EntStageName AS 'List',
    'entertainer' AS 'Type' -- 新增艺人类型标识
FROM
    entertainers
WHERE
    EntertainerID IN (
        SELECT DISTINCT EntertainerID
        FROM entertainer_styles
        WHERE StyleID = (SELECT StyleID FROM StyleCTE)
    );

关键修改说明

  • 在第一个SELECT分支(客户数据)中直接添加'customer' AS 'Type',明确标记该部分数据为客户
  • 在第二个SELECT分支(艺人数据)中添加'entertainer' AS 'Type',标记为艺人
  • 额外用CTE提取了Contemporary的StyleID,避免多次重复执行相同的子查询,优化查询效率

如果你之前尝试用CASE语句出错,大概率是因为CASE语句在单个分支里没有明确的判断条件——毕竟每个分支的数据源已经确定了类型,完全不需要CASE来判断,直接写固定值更简单高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:46:47