如何在SQL查询中访问当前/相同/自行列值

时间:2018-05-10 05:07:52

标签: sql sql-server

问题:我有提交审计报告的公司。我需要准备一个报告列,根据两个条件显示NextDueDate是什么。

  1. 如果任何FormF表格有多行,那么距最新表格的结束日期为一年,即" ReportingTo"

  2. 如果只找到一个FormF记录,那么在#34; RegistrationDate"

  3. 一年后

    代码:

    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]
    

    enter image description here

1 个答案:

答案 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