如何在NETEZZA中实现CROSS APPLY?

问题描述 投票:0回答:1

我想分享我们如何在不使用它的情况下实现CROSS APPLY功能。[适用于NETEZZA SQL]。

以下查询使用交叉申请每周回顾最后52周:

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

我们可以通过上面的代码中的以下修改来实现这一点,并摆脱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
sql-server join netezza cross-join cross-apply
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.