如何在NETEZZA中实现CROSS APPLY?

时间:2018-01-09 02:36:29

标签: sql-server join netezza cross-join cross-apply

我想分享一下如何在不使用CROSS APPLY功能的情况下实现NETEZZA功能。[适用于SQL SELECT t1.col, t3.col AS col_last52wks FROM TABLE1 t1 CROSS APPLY ( SELECT TOP 52 t2.col FROM TABLE2 t2 WHERE t2.col <= t1.col ORDER BY t2.col DESC ) t3 --Last 13 Weeks Condition WHERE t1.col >= minvalue -- RANDOM AND t1.col <= maxvalue-- RANDOM ]。

跟随查询使用交叉申请每周最后52周回复:

CROSS APPLY

我们可以通过以上代码中的以下修改来实现这一点并摆脱SELECT t1.col, t2.col AS col_last52wks FROM TABLE1 t1 INNER JOIN TABLE2 t2 ON t2.sequencecol BETWEEN (t1.sequencecol - 51) AND t1.sequencecol WHERE t1.col >= minvalue AND t1.col <= maxvalue

20181101

1 个答案:

答案 0 :(得分:1)

我在这种情况下使用CROSS APPLY:

当我split将列数据分成多行并在此分割数据上“加入”时

这些陈述一般如下

FROM Table1
CROSS APPLY dbo.UDF_TableFunctionName(Table1Column) as t

因此,如果要将字符串值传递给表函数,则可以将其简单地用作

select * from dbo.UDF_TableFunctionName(@strVariable)

但是如果你想在行集而不是单个值上使用这个函数,那么你使用CROSS APPLY

如果要为行列返回多于1列,则CROSS APPLY非常有用 例如,在此table valued function中,我将日期列解析为其日期部分并显示在同一行中

select
 o.SalesOrderID, o.OrderDate,
 d.[year], d.[month], d.[day]
from Sales.SalesOrderHeader o
cross apply dbo.udf_ParseDate(o.OrderDate) d

在CROSS APPLY上,你不使用ON后的连接条件 您只需将列作为输入参数传递给表值函数

CROSS JOIN只是两张桌子的笛卡儿。 我们以前没有“CROSS JOIN”编码,如下所示

FROM TableA, TableB