如何对查询求和的结果进行分组和求和

时间:2016-04-06 03:02:11

标签: sql group-by sum oracle-sqldeveloper

标题有点令人困惑,但我不确定如何说出这个问题。以下是一些更多细节:

我写了一个查询,给出了以下结果:

Sample Query needing to be grouped. (6 records)

这是正确的结果,我不想更改此查询。我想要完成的是只有两个同名的结果,保留最早的日期并将其余的分组。

我试过了:

select name, SUM(sum) as sum, edate
FROM
(--MY QUERY RESULT--)
group by name, date having edate > '15-Apr-02';

我还尝试使用基于记录edate是否为null的案例,但我希望每个名称总是返回两个记录(1表示最早的edate,其他所有其他记录为下一个最早的edate)

我正在寻找上面的超级简单查询的结果:

Sample Result Query. (4 Records)

任何帮助/想法都会很棒!

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

WITH CTETab (NAME, EDATE)
AS
(
    --SELECT The earliest EDATE for each NAME
    SELECT
        NAME
        , MIN(EDATE) AS EDATE
    FROM
        @Tab
    GROUP BY NAME
)
SELECT
    T.NAME, [COUNT], T.EDATE
FROM
    @Tab AS T
    INNER JOIN
    CTETab AS CT
        ON T.NAME = CT.NAME
            AND T.EDATE = CT.EDATE
UNION ALL
SELECT
    T.NAME, SUM([COUNT]), MAX(T.EDATE)
FROM
    @Tab AS T
    INNER JOIN
    CTETab AS CT
        ON T.NAME = CT.NAME
            AND (T.EDATE <> CT.EDATE OR T.EDATE IS NULL)
GROUP BY T.NAME
ORDER BY T.NAME, T.EDATE

适用于SQL Server 2012(2014年,2016年)。

您可以通过子查询更改WITH子句,并将其用于每个SELECT语句。