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

SQL脚本执行报错,如何修改使其返回'Problem'或'OK'?

解决你的SQL脚本问题

嘿,我来帮你搞定这个SQL脚本的问题~ 首先得指出原脚本的核心问题:你把创建临时表、查询、删除表这多个批处理语句塞进了SELECT ... FROM ()的子查询里,这在SQL里是不允许的——子查询必须是单一的SELECT结果集,不能包含这类DDL(数据定义语言)操作。

接下来给你两种修改方案,都能实现“有符合条件的数据返回'Problem',无则返回'OK'”的需求:

方案1:无需临时表,用EXISTS高效判断

这个方案最简洁,性能也更好(因为EXISTS只要找到一条符合条件的记录就会停止查询):

SELECT 
    CASE 
        WHEN EXISTS (
            -- 检查是否存在同一个计费代码对应多个产品子类型的情况
            SELECT 1
            FROM TOfferingBase
            GROUP BY PBillingCode
            HAVING COUNT(DISTINCT OfferingSubTypeID) >= 2
        ) THEN 'Problem'
        ELSE 'OK'
    END AS durum

逻辑说明:

  • 内层的GROUP BY PBillingCode按计费代码分组,COUNT(DISTINCT OfferingSubTypeID) >=2表示同一个计费代码关联了至少2种不同的产品子类型,也就是你说的“同时用于多产品和单产品”。
  • 外层用CASE判断是否存在这样的计费代码,返回对应的结果。

方案2:保留临时表(适合复杂逻辑场景)

如果你因为某些原因一定要用临时表,那得把操作拆成独立的批处理步骤,不能嵌套在子查询里:

-- 第一步:创建临时表,存储按产品子类型+计费代码分组后的结果
SELECT PBillingCode, OfferingSubTypeID 
INTO #Coklu_Basit_Sunu 
FROM TOfferingBase 
GROUP BY OfferingSubTypeID, PBillingCode;

-- 第二步:判断是否存在符合条件的记录并返回结果
SELECT 
    CASE 
        WHEN EXISTS (
            SELECT PBillingCode
            FROM #Coklu_Basit_Sunu
            GROUP BY PBillingCode
            HAVING COUNT(PBillingCode) >= 2
        ) THEN 'Problem'
        ELSE 'OK'
    END AS durum;

-- 第三步:清理临时表
DROP TABLE #Coklu_Basit_Sunu;

逻辑说明:

  • 先把分组结果存入临时表,再对临时表的计费代码分组,统计出现次数≥2的记录(也就是对应多个产品子类型的计费代码)。
  • 最后用CASE判断是否存在这类记录,返回结果后删除临时表。

两种方案都能满足你的需求,推荐方案1,更简洁高效~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:55:40