繁体   English   中英

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

[英]How to group and sum a result of a query sums

标题有点令人困惑,但是我不确定该如何表达这个问题。 以下是更多详细信息:

我写了一个查询,给我这样的结果:

样本查询需要分组。 (6条记录)

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

我努力了:

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

我还尝试根据记录edate是否为null来使用case,但是我希望它始终按名称返回两个记录(其中1个具有最早的版本,并将所有其他记录归入下一个最早的版本)

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

样本结果查询。 (4条记录)

任何帮助/想法都太棒了!

您可以尝试如下操作:

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语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM