标题有点令人困惑,但我不确定如何说出这个问题。以下是一些更多细节:
我写了一个查询,给出了以下结果:
这是正确的结果,我不想更改此查询。我想要完成的是只有两个同名的结果,保留最早的日期并将其余的分组。
我试过了:
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)
我正在寻找上面的超级简单查询的结果:
任何帮助/想法都会很棒!
答案 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语句。