具有多列输入的SQL函数中的嵌套个案表达式

问题描述 投票:0回答:3

我试图了解是否正确地正确嵌套了这些case语句。这是嵌套这些内容的最佳方法吗?

为了解释我在这里试图做的是创建一个在单个表中查看三列的函数。根据找到的输入确定字符串结果。如果在第1列(也称为测试)中找不到输入,则将其移至第2列(移调),然后移至第3列(构造),直到找到结果或继续进行。

我不确定这是解决这种情况的最佳或正确方法。任何建议将不胜感激。

CREATE OR REPLACE FUNCTION any_class(test TEXT, transpose TEXT, construction TEXT) RETURNS TEXT AS $$
    SELECT CASE
        WHEN test IN ('a', 'b') THEN 'result1'
        WHEN test IN ('c', 'd') THEN 'result2'
        WHEN test IN ('e', 'f') THEN 'result3'
        WHEN test IN ('g', 'h') THEN 'result4'
        WHEN test IN ('i', 'j') THEN 'result5'
        WHEN test IN ('k', 'l', 'm') THEN 'result6'
        WHEN test IN ('n') THEN 'result7'
        WHEN test IN ('o') THEN 'result8'
        WHEN test IN ('p') THEN 'result9'
        WHEN test IN ('q', 'r', 's', 't', 'u') THEN 'result10'
        ELSE CASE
            WHEN transpose IN ('a', 'b') THEN 'result1'
            WHEN transpose IN ('c', 'd') THEN 'result2'
            WHEN transpose IN ('e', 'f') THEN 'result3'
            WHEN transpose IN ('g', 'h') THEN 'result4'
            WHEN transpose IN ('i', 'j') THEN 'result5'
            WHEN transpose IN ('k', 'l', 'm') THEN 'result6'
            WHEN transpose IN ('n') THEN 'result7'
            WHEN transpose IN ('o') THEN 'result8'
            WHEN transpose IN ('p') THEN 'result9'
            WHEN transpose IN ('q', 'r', 's', 't', 'u') THEN 'result10'
            ELSE CASE
                WHEN construction IN ('a', 'b') THEN 'result1'
                WHEN construction IN ('c', 'd') THEN 'result2'
                WHEN construction IN ('e', 'f') THEN 'result3'
                WHEN construction IN ('g', 'h') THEN 'result4'
                WHEN construction IN ('i', 'j') THEN 'result5'
                WHEN construction IN ('k', 'l', 'm') THEN 'result6'
                WHEN construction IN ('n') THEN 'result7'
                WHEN construction IN ('o') THEN 'result8'
                WHEN construction IN ('p') THEN 'result9'
                WHEN construction IN ('q', 'r', 's', 't', 'u') THEN 'result10'
                END
            END
    END;
$$
LANGUAGE SQL
IMMUTABLE PARALLEL SAFE;
sql postgresql function nested case-statement
3个回答
0
投票

您可以使用一个更大的case表达式来执行此操作:


0
投票

函数中的逻辑看起来不错,我认为它可以满足您的要求。


0
投票

也许是数组重叠运算符&&,它检查两个数组是否至少在一个元素上具有共同点,这会使事情变得容易一些。使用它,您不需要嵌套CASE表达式,而只需嵌套一个。

© www.soinside.com 2019 - 2024. All rights reserved.