如何将交叉表与动态变量一起使用

时间:2020-04-09 14:42:31

标签: sql postgresql

我目前正在寻找创建pgsql函数来执行以下操作:检查其参数是否为空,删除与查找表不匹配的输入,然后旋转返回的数据(这是相关参数的ID)。

我的假设是交叉表不支持$变量,但是如果我的假设正确,我将无法解决如何获得所需的输出。

CREATE OR REPLACE FUNCTION _audit(
    INT4 DEFAULT NULL
    , VARCHAR(50) DEFAULT NULL
    , VARCHAR(50) DEFAULT NULL
)
RETURNS TABLE (
    datetime TIMESTAMPTZ, id INT2, c1 int4, c2 int4
)
AS $$

    SELECT 
        now() AS datetime
        , *
    FROM 
    crosstab('
        WITH cte (eval) AS (
            SELECT CASE WHEN '$2' IS NULL THEN NULL ELSE '$2' END
            UNION ALL SELECT CASE WHEN '$3' IS NULL THEN NULL ELSE '$3' END
        ) 

        SELECT
            lookup.id
            , lookup.mod_id
            , lookup.mod_id as val
        FROM 
            data.mod_lookup AS lookup
            INNER JOIN cte AS cte ON lookup.mod_eval = cte.eval 
        ORDER BY 
            mod_id
    ') AS final_results(id INT2, c1 int4, c2 int4)
    ;
$$ 
LANGUAGE SQL 
CALLED ON NULL INPUT;

SELECT audit(
    1
    , CAST('mod n 1' AS VARCHAR(50))
    , CAST('mod n 1' AS VARCHAR(50))
)

谢谢!

0 个答案:

没有答案