我想分享一下如何在不使用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
答案 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