【发布时间】:2019-09-09 12:03:17
【问题描述】:
我有一个查询,其中一系列步骤在不同的列上不断重复,例如:
SELECT DISTINCT
MAX (
CASE
WHEN table_2."GRP1_MINIMUM_DATE" <= cohort."ANCHOR_DATE" THEN 1
ELSE 0
END)
OVER (PARTITION BY cohort."USER_ID")
AS "GRP1_MINIMUM_DATE",
MAX (
CASE
WHEN table_2."GRP2_MINIMUM_DATE" <= cohort."ANCHOR_DATE" THEN 1
ELSE 0
END)
OVER (PARTITION BY cohort."USER_ID")
AS "GRP2_MINIMUM_DATE"
FROM INPUT_COHORT cohort
LEFT JOIN INVOLVE_EVER table_2 ON cohort."USER_ID" = table_2."USER_ID"
我正在考虑编写一个函数来完成此操作,因为这样做可以节省我的查询空间。我一直在阅读一些关于 SQL 中的 UDF,但还不明白是否可以将列名作为参数传递(即只需将“GRP1_MINIMUM_DATE”切换为“GRP2_MINIMUM_DATE”等)。我想要的是一个看起来像这样的查询
SELECT DISTINCT
FUNCTION(table_2."GRP1_MINIMUM_DATE") AS "GRP1_MINIMUM_DATE",
FUNCTION(table_2."GRP2_MINIMUM_DATE") AS "GRP2_MINIMUM_DATE",
FUNCTION(table_2."GRP3_MINIMUM_DATE") AS "GRP3_MINIMUM_DATE",
FUNCTION(table_2."GRP4_MINIMUM_DATE") AS "GRP4_MINIMUM_DATE"
FROM INPUT_COHORT cohort
LEFT JOIN INVOLVE_EVER table_2 ON cohort."USER_ID" = table_2."USER_ID"
谁能告诉我这是否可行/给我指出一些可能对我有帮助的资源?
谢谢!
【问题讨论】:
-
没有这种直接的方法,但是可以使用 PL/SQL 的动态查询概念来实现。
标签: sql oracle user-defined-functions