问题:我有提交审计报告的公司。我需要准备一个报告列,根据两个条件显示NextDueDate是什么。
如果任何FormF表格有多行,那么距最新表格的结束日期为一年,即" ReportingTo"
如果只找到一个FormF记录,那么在#34; RegistrationDate"
代码:
SELECT
F.[ID], enty.[Title (Title)],
format(F.[ReportingFrom], 'MM/dd/yyyy') as 'ReportingFrom',
format(F.[ReportingTo], 'MM/dd/yyyy') as 'ReportingTo',
format(enty.[RegistrationDate], 'MM/dd/yyyy') as 'RegistrationDate',
CASE
WHEN ((SELECT COUNT(F.ID) FROM [db_owner].[FormF] F
WHERE F.[EntityID] = F.[EntityID]) > 0)
THEN format(DATEADD(year, 1, (SELECT TOP 1 F.[ReportingTo]
FROM [db_owner].[FormF] F
WHERE F.[EntityID]=F.[EntityID]
ORDER BY F.ID DESC)) + 1, 'MM/dd/yyyy')
ELSE format(DATEADD(year, 1, enty.[RegistrationDate]) + 1, 'MM/dd/yyyy')
END as 'AuditDueDate',
F.[EntityID]
FROM
[db_owner].FormF F
JOIN
entity enty ON F.[EntityID] = enty.ID
WHERE
F.[EntityID] = F.[EntityID]
答案 0 :(得分:1)
尽可能避免在select列中进行子查询。
;WITH EntityCounts AS
(
SELECT
EntityID = F.EntityID,
Amount = COUNT(1),
LatestEndDate = MAX(F.ReportingTo)
FROM
[db_owner].[FormF] AS F
GROUP BY
F.EntityID
)
SELECT
F.ID,
E.[Title (Title)],
F.ReportingFrom,
F.ReportingTo,
E.RegistrationDate,
AuditDueDate = CASE
WHEN C.Amount > 1 THEN DATEADD(YEAR, 1 C.LatestEndDate)
ELSE DATEADD(YEAR, 1, E.RegistrationDate) END
FROM
[db_owner].[FormF] AS F
INNER JOIN EntityCounts AS C ON F.EntityID = C.EntityID
INNER JOIN entity AS E ON F.EntityID = E.ID