我正在使用MS Access 2010.我的源表包含以下列:
ID1
ID2 (ID1 + suffix)
Desc
Status
CancelDate
CancelCode
Amount
ID2被视为唯一ID(尽管存在少量数据输入问题导致差异,在容忍范围内)。
状态包含三个可能的值 - 1,7或T.
在ID1中,可能有多个ID2具有不同的状态。
CancelDate和CancelCode仅存在于状态为7或T的条目
我想要实现的是我的查询返回按ID1分组的条目。如果ID1的任何条目具有状态1,则返回这些条目中的任何一个。但是,如果没有条目具有状态1,则返回具有最新CancelDate的记录。
我现在把它作为我的代码:
SELECT
ID1,
FIRST(Status) as Status,
Desc,
max(CancelDate) as MaxOfCancelDate,
CancelCode,
max(Amount) as Amount
FROM
Table
GROUP BY
ID1,
Desc,
CancelCode
我放置FIRST因为源表被排序,其中所有状态为1的记录都位于状态为7和T的记录之前。这显然不符合我的意愿,如果特定ID1具有不同状态的条目,则会返回多条记录。
我如何实现目标?
我首先对SELECT DISTINCT ID1
有一个粗略的想法,然后将其与另一个子SELECT
联系起来,但无法弄清楚如何。
谢谢。
答案 0 :(得分:0)
这样的事可能有用:
(SELECT
First(ID1) AS ID1,
Desc,
CancelDate,
CancelCode,
max(Amount) as Amount
FROM
Table
WHERE Status='1'
GROUP BY
Desc,
CancelDate,
CancelCode
)
UNION ALL
(SELECT
ID1,
Desc,
Max(CancelDate) AS MaxCancelDate,
CancelCode,
max(Amount) as Amount
FROM
Table
WHERE( Status='7' OR Status='T')
GROUP BY
ID1,
Desc,
CancelCode)