дублированное значение - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть этот код, например, CA этого года и CA_AN за предыдущий год. Проблема в CA_AN, я получил некоторое значение, как показано на рисунке. введите описание изображения здесь

    SELECT DATENAME(month, GL_DATEPIECE) AS 'MONTH', et_region as 'REGION', e.et_etablissement as 'STORE CODE',et_libelle as 'STORE NAME',
        CA=CONVERT(DECIMAL(15,2),sum(gl_totalttcdev)),

        CA_AN=(SELECT CONVERT(DECIMAL(15,2),sum(gl_totalttcdev))
        from piece
        left join etabliss as e1 on e1.et_etablissement= gp_etablissement

        where
CAST(GP_DATEPIECE AS DATE) BETWEEN  DATEADD(YEAR,-1,CAST(@DATED AS DATE))  and DATEADD(YEAR,-1,CAST(@DATEF AS DATE))
        group by et_etablissement, et_libelle
        ),

    from piece 
    left join etabliss as e on gp_etablissement=e.et_etablissement  
    and CAST(GP_DATEPIECE AS DATE) BETWEEN  CAST(@DATED AS DATE) and CAST(@DATEF AS DATE) 

    group by et_region,et_etablissement, et_libelle, DATENAME(month, GL_DATEPIECE)
    order by et_region,CA_AN DESC,et_etablissement

1 Ответ

0 голосов
/ 16 апреля 2019

Может потребоваться несколько итераций, но вот пример, из которого вы можете построить.Вы можете СУММУ результаты выборочно на основе диапазонов дат для текущего года и предыдущего года , без выполнения подзапроса.Немного проще для чтения и может работать лучше.

Предполагается, что [GP_DATEPIECE] является столбцом даты или даты и времени.

DECLARE @StartDate date = '1/1/2019'
DECLARE @EndDate date = '4/30/2019'
DECLARE @StartDatePreviousYear date = DATEADD(YEAR, -1, @StartDate)
DECLARE @EndDatePreviousYear date = DATEADD(YEAR, -1, @EndDate)

SELECT
     DATENAME(month, [GL_DATEPIECE]) AS [MONTH]
    ,[et_region] AS [REGION]
    ,[e].[et_etablissement] AS [STORE CODE]
    ,[et_libelle] AS [STORE NAME]
    ,SUM(CASE WHEN [GP_DATEPIECE] BETWEEN @StartDate AND @EndDate THEN ISNULL([gl_totalttcdev], 0) ELSE 0 END) AS [CA]
    ,SUM(CASE WHEN [GP_DATEPIECE] BETWEEN @StartDatePreviousYear AND @EndDatePreviousYear THEN ISNULL([gl_totalttcdev], 0) ELSE 0 END) AS [CA_AN]
    ,SUM(CASE WHEN [GP_DATEPIECE] BETWEEN @StartDate AND @EndDate THEN 1 ELSE 0 END) AS [CurrentYearItemCount]
    ,SUM(CASE WHEN [GP_DATEPIECE] BETWEEN @StartDatePreviousYear AND @EndDatePreviousYear THEN 1 ELSE 0 END) AS [PreviousYearItemCount]
FROM [piece]
    LEFT OUTER JOIN [etabliss] AS [e] ON [piece].[gp_etablissement] = [e].[et_etablissement]
GROUP BY
     DATENAME(month, [GL_DATEPIECE])
    ,[et_region]
    ,[et_etablissement]
    ,[et_libelle]
ORDER BY
     [et_region] ASC
    ,[et_etablissement] ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...