使用CTE,可以定义仅在执行当前查询期间才存在的“on he fly”自定义表:对函数也可以这样做吗?
我有一个具有复杂where条件的查询,必须在查询的group by部分中进行复制,所以最好将这个分组逻辑封装在自己的代码中,并在任何需要重用的地方重用,就像对CTE一样。
发布于 2022-08-03 12:29:52
不不可能。此外,通常最好避免在关系语言(如SQL )中使用函数,尤其是在谓词中,这主要是从性能角度考虑的。
相反,您可以做的是使用CTE (正如您熟悉的那样)将复杂逻辑定义一次为列,然后在WHERE和GROUP BY子句中引用这些列,而不必重复逻辑。
例如:
WITH CTE AS
(
SELECT
Column1,
Column2,
Column1 + Column2 AS NewColumn,
CASE
WHEN Column3 > Column4 THEN 1
ELSE 0
END AS IsColumn3Greater
FROM YourTable
)
SELECT
Column1,
NewColumn
FROM CTE
WHERE IsColumn3Greater = 1
GROUP BY Column1, NewColumnhttps://dba.stackexchange.com/questions/315164
复制相似问题