如何将CTE编码更改为INLINE视图? Oracle SQL

我的系统不允许CTE编码,并且第一个字必须始终是SELECT。

有人可以解释一下(最好是在Oracle SQL中使用假人格式)如何将用CTE编写的代码更改为INLINE代码?

以CTE代码为例:

On Error Resume Next
Set Rng = ws.Range("G2:G" & ws.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible)
On Error GoTo 0

If Rng Is Nothing Then Exit Sub

For Each rcell In Rng.Cells

    If Containsnumber(rcell.Value,1,2,14,26,34,37,39,40,63,64,66,111,915,1371) Then
        rcell.Offset(,4).ClearContents
    End If

Next

我该怎么写(请非常容易理解),以便SELECT成为代码中的第一个单词,并且不使用CTE?

zpc1234 回答:如何将CTE编码更改为INLINE视图? Oracle SQL

您的CTE在查询中仅使用一次,因此您可以将其转换为子查询:

SELECT enquiry_number,enquiry_log_number,follow_up_name,follow_up_date
FROM (
    SELECT 
        e.enquiry_number,e.enquiry_log_number,f.follow_up_name,e.follow_up_date,RANK () OVER (
            PARTITION BY e.enquiry_number
            ORDER BY e.enquiry_log_number DESC
        ) rn
       FROM enquiry_status_log e
        JOIN follow_up f ON e.follow_up_code = f.follow_up_code
    ) table1
WHERE rn = 1
ORDER BY enquiry_number,enquiry_log_number

注意:表别名使查询更短且更易于阅读。我修改了您的查询以使用它们。

此外,有可能 可以将您的查询重写为使用相关子查询进行过滤,而不是rank()。在Oracle中,这可能会提高性能:

SELECT 
    e.enquiry_number,e.follow_up_date
FROM enquiry_status_log e
JOIN follow_up f ON e.follow_up_code = f.follow_up_code
WHERE e.enquiry_log_number = (
    SELECT MAX(enquiry_log_number)
    FROM enquiry_status_log e1
    WHERE e.enquiry_number = e1.enquiry_number
)
ORDER BY e.enquiry_number,e.enquiry_log_number
本文链接:https://www.f2er.com/3056442.html

大家都在问