使用包含GROUP BY子句的表连接重写查询

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

是否可以重写以下查询

SELECT      CT.GROUP, CT.EMP_ID, HT.EFF_DT
FROM        CURR_TABLE CT
JOIN        (SELECT     GROUP, EMP_ID, MAX(EFF_DT) AS EFF_DT
            FROM        HIST_TABLE
            WHERE       STAT = 'A' 
            GROUP BY    GROUP, EMP_ID) HT ON CT.GROUP = HT.GROUP AND 
            CT.EMPID = HT.EMP_ID
WHERE       CT.GROUP = :1
AND         CT.EMP_ID = :2

在某种方式类似于CROSS JOIN风格?

SELECT table1.column1, table2.column2...
FROM  table1, table2 [, table3 ]

原因是我想在Peoplesoft中创建这样的查询,而上述只能通过使用group by子句为选择创建单独的视图来实现。我想在一个查询中执行此操作而不创建其他视图。

oracle peoplesoft
1个回答
1
投票

您可以尝试将查询编写为具有聚合的单级联接:

SELECT
    CT.GROUP,
    CT.EMP_ID,
    MAX(HT.EFF_DT) AS EFF_DT
FROM CURR_TABLE CT
LEFT JOIN HIST_TABLE HT
    ON CT.GROUP = HT.GROUP AND
       CT.EMPID = HT.EMP_ID AND
       HT.STAT = 'A'
WHERE
    CT.GROUP = :1 AND
    CT.EMP_ID = :2
GROUP BY
    CT.GROUP,
    CT.EMP_ID;

请注意,GROUP是一个保留的SQL关键字,您可能必须使用双引号将其转义以使此查询(或您的问题中的一个)在Oracle上运行。

© www.soinside.com 2019 - 2024. All rights reserved.