在以下所有描述中,我都更改了变量,函数和数据集的名称,以使您更轻松地遵循代码。我想做的是创建一个新函数myFx,该函数接受var_a的参数并输出具有3列的表-var_a,var_b和var_c。
下面显示了代码,其中大部分是通用表表达式(CTE),该表使用UNION组合来自三个SELECT语句的行以生成临时表结果t_union。最下面的代码是通过使用t_union并将其自连接到自身而输出我想要的代码的代码。
尽管下面的代码段无需输入功能参数(CREATE或REPLACE FUNCTION ...和RETURNS TABLE ...)即可工作,但是一旦在其中添加了功能参数,就会收到一条错误消息,表明我无法使用与(与t_union)一样。有人可以告诉我这里是什么问题吗?非常感谢!
CREATE OR REPLACE FUNCTION myFx (var_a varchar(2))
RETURNS TABLE (var_a varchar(2),
var_b character,
var_c character )
WITH t_union
AS (SELECT x, y, z,
RANK() OVER (PARTITION BY x ORDER BY (y COLLATE "C") ASC) AS stp_pos
FROM DATASET1
UNION ALL
SELECT x, y, z,
RANK() OVER (PARTITION BY x ORDER BY (y COLLATE "C") ASC) AS stp_pos
FROM DATASET2
UNION ALL
SELECT x, y, z,
RANK() OVER (PARTITION BY x ORDER BY (y COLLATE "C") ASC) AS stp_pos
FROM DATASET3
SELECT BS.atoc_code, L1.train_uid, L1.stp_indicator, L1.location AS loc1, L2.location AS loc2
FROM t_union L1 JOIN t_union L2
ON L1.x=L2.x AND L1.y<L2.y
JOIN DATASET3 BS ON L1.x=BS.x;
这是我得到的错误代码:
ERROR: syntax error at or near "WITH"
LINE 9: WITH t_union
^
SQL state: 42601
Character: 197