[英]How to group and sum a result of a query sums
标题有点令人困惑,但是我不确定该如何表达这个问题。 以下是更多详细信息:
我写了一个查询,给我这样的结果:
这是正确的结果,我不想更改此查询。 我要完成的是只保留两个具有相同名称的结果,并保留最早的日期并将其余的分组。
我努力了:
select name, SUM(sum) as sum, edate
FROM
(--MY QUERY RESULT--)
group by name, date having edate > '15-Apr-02';
我还尝试根据记录edate是否为null来使用case,但是我希望它始终按名称返回两个记录(其中1个具有最早的版本,并将所有其他记录归入下一个最早的版本)
我在上面的超级简单查询中寻找的结果:
任何帮助/想法都太棒了!
您可以尝试如下操作:
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.