不同参数执行不同SQL问题

WITH FilteredParties AS (

    SELECT 

        Shipper,

        CASE 

            WHEN Consignee = 'TO ORDER' OR Consignee = SUBSTR(业务分析III, 1, LENGTH(Consignee)) THEN NULL

            ELSE Consignee

        END AS Consignee,

        CASE 

            WHEN "Notify Party" = 'SAME AS CONSIGNEE' THEN NULL

            ELSE "Notify Party"

        END AS "Notify Party"

    FROM 

        CoralPerformanceData

    WHERE 业务分析III = 'JAPAN MAG/JM SHOJI'

    AND BSTYPE != 'MASTER'

    ${if(len(年度)==0,"","AND YEAR = '" + 年度 + "'")}

    ${if(len(季度)==0,"","AND 季度 = '" + 季度 + "'")}

    ${if(len(月度)==0,"","AND TO_CHAR(Month,'YYYY/MM') = '" + 月度 + "'")}

    ${if(len(运输方式)==0,"","AND TRANSPORTATION = '" + 运输方式 + "'")}

    ${if(len(POD)==0,"","AND \"POD/POL\" = '" + POD + "'")}

)

下面的查询我想要根据某一参数来执行不同sql,如果${进出口}为空执行

SELECT 

    COUNT(DISTINCT party) AS total_unique_parties

FROM (

    SELECT Shipper AS party FROM FilteredParties WHERE Shipper IS NOT NULL

    UNION

    SELECT Consignee AS party FROM FilteredParties WHERE Consignee IS NOT NULL

    UNION

    SELECT "Notify Party" AS party FROM FilteredParties WHERE "Notify Party" IS NOT NULL

) subquery

如果${进出口}为E执行

SELECT 

    COUNT(DISTINCT party) AS total_unique_parties

FROM (

    SELECT Shipper AS party FROM FilteredParties WHERE Shipper IS NOT NULL

) subquery

如果${进出口}为I执行

SELECT 

    COUNT(DISTINCT party) AS total_unique_parties

FROM (

    SELECT Consignee AS party FROM FilteredParties WHERE Consignee IS NOT NULL

    UNION

    SELECT "Notify Party" AS party FROM FilteredParties WHERE "Notify Party" IS NOT NULL

) subquery

FineReport boboboy 发布于 2025-3-24 15:52
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共6回答
最佳回答
0
华莉星宸Lv7专家互助
发布于2025-3-24 16:14

可以用这个方式,很好理解~~

${if(len(进出口)=0,"","/*")}

SQL1部分

${if(len(进出口)=0,"","*/")}

${if(进出口="E","","/*")}

SQL2部分

${if(进出口="E","","*/")}

${if(进出口="I","","/*")}

SQL3部分

${if(进出口="I","","*/")}

最佳回答
0
CovidLv3高级互助
发布于2025-3-24 15:53

${if(len(进出口)==0,"SQL1","SQL2")}

  • boboboy boboboy(提问者) 我有三种条件呢
    2025-03-24 15:57 
  • Covid Covid 回复 boboboy(提问者) ${SWITCH("true",进出口=0,"sql1",进出口=2,"SQL2",进出口=3,"SQL3")}
    2025-03-24 16:02 
最佳回答
0
CD20160914Lv8专家互助
发布于2025-3-24 15:53

${if(参数="E","select * from 表名称22","select * from 表名3  where 字段=你的条件")}

最佳回答
0
苏菲的供词Lv6中级互助
发布于2025-3-24 16:21

select * from (sql1) where '${参数}' = '1'

union 

select * from (sql2) where '${参数}' = '2'

最佳回答
0
iQianLv4初级互助
发布于2025-3-24 16:22

我的建议:给三个SQL分别都加一个条件:where 1<>1 , 根据   ${进出口}  的值来判断 输出 这个条件。

把这三个sql 写成子查询,最后求和。

因为始终只有一个sql有数,可以保证最终结果的正确。

${if()}  这种 我觉得对字符串拼接要求很高。

最佳回答
0
小阿涛吖Lv6见习互助
发布于2025-3-24 16:33

用关联数据集比较简单

  • 7关注人数
  • 45浏览人数
  • 最后回答于:2025-3-24 16:33
    请选择关闭问题的原因
    确定 取消
    返回顶部