Загрузка данных


USE [replTransVas];
GO

SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO

ALTER VIEW [dbo].[view_otyvMember]
AS
WITH ReportRows AS
(
    -- Основной путь: дата мероприятия заполнена.
    SELECT
        r.kod,
        r.kodMember,
        r.tipReport,
        r.region,
        r.nmOrg,
        r.vidOrg,
        r.listenerCntInteger,
        r.manFIO,
        r.otzyv,
        r.kodProject,
        r.meropNm,
        CONVERT(date, a.dtMerop) AS meropDt,
        r.emZayavka,
        m.kodMerop,
        m.timeInMerop,
        a.nmMerop,
        r.processingStatus,
        r.mtsFormLink
    FROM dbo.dat_activity AS a
    INNER JOIN dbo.dat_members AS m
        ON m.kodMerop = a.kod
    INNER JOIN dbo.sb_reports AS r
        ON r.kodMember = m.kod
    INNER JOIN dbo.srvs_maxWave AS mw
        ON mw.maxWave = a.kodWave
       AND mw.kodProject = r.kodProject
    WHERE
        a.dtMerop IS NOT NULL
        AND r.kodProject <> 7

    UNION ALL

    -- Резервный путь: дата берётся из отчёта.
    SELECT
        r.kod,
        r.kodMember,
        r.tipReport,
        r.region,
        r.nmOrg,
        r.vidOrg,
        r.listenerCntInteger,
        r.manFIO,
        r.otzyv,
        r.kodProject,
        r.meropNm,
        TRY_CONVERT(date, r.meropDt, 104) AS meropDt,
        r.emZayavka,
        m.kodMerop,
        m.timeInMerop,
        a.nmMerop,
        r.processingStatus,
        r.mtsFormLink
    FROM dbo.dat_activity AS a
    INNER JOIN dbo.dat_members AS m
        ON m.kodMerop = a.kod
    INNER JOIN dbo.sb_reports AS r
        ON r.kodMember = m.kod
    INNER JOIN dbo.srvs_maxWave AS mw
        ON mw.maxWave = a.kodWave
       AND mw.kodProject = r.kodProject
    WHERE
        a.dtMerop IS NULL
        AND r.kodProject <> 7
)
SELECT
    r.kod,
    N'отчет' AS tip,
    r.kod AS kodReport,
    r.kodMember,
    cert.mtsCertNumber,
    r.tipReport,
    r.region,
    r.nmOrg,
    r.vidOrg,
    r.listenerCntInteger,
    r.manFIO,
    r.otzyv,
    r.kodProject,
    r.meropNm,
    r.meropDt,
    r.emZayavka,
    org.vidOO,
    org.shName,
    r.kodMerop,
    r.timeInMerop,
    r.nmMerop,
    r.processingStatus AS status,
    r.mtsFormLink
FROM ReportRows AS r
OUTER APPLY
(
    SELECT TOP (1)
        e.kodOrg
    FROM dbo.dat_emails AS e
    WHERE e.em = r.emZayavka
    ORDER BY e.kod DESC
) AS lastEmail
LEFT JOIN dbo.dat_organization AS org
    ON org.kod = lastEmail.kodOrg
OUTER APPLY
(
    SELECT
        CASE
            WHEN COUNT_BIG(*) = 1
                THEN MAX(c.mtsCertNumber)
            ELSE NULL
        END AS mtsCertNumber
    FROM myNewVasya.dbo.dat_mts_certificates AS c
    WHERE c.kodReport = r.kod
      AND c.kodMember = r.kodMember
) AS cert;
GO