Избегайте нескольких случаев, когда под кейс - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть этот запрос, где 'sum ("same")' только здесь, чтобы избежать записи того же условия, что и в первом случае

SELECT
    CASE WHEN MonthId in (1,2,3) THEN sum(CASE WHEN @Amount = 'NETEXT' THEN NetExternalExcPcEuroBudget 
                                               WHEN @Amount = 'NETAGENCY' THEN NetAgencyIncPcEuroBudget
                                               ELSE NetAgencyIncPcEuroBudget + NetExternalExcPcEuroBudget
                                            END
                                         )END AS Q1,
    CASE WHEN MonthId in (4,5,6) THEN sum("same")END AS Q2,
    CASE WHEN MonthId in (7,8,9) THEN sum("same")END AS Q3,
    CASE WHEN MonthId in (10,11,12) THEN sum("same")END AS Q4,
    monthId, 
    RefYearId AS Year
FROM [dbo].[FactMonthlyConfirmationDashboard]

Я хотел бы избежать второго подусловия CASE WHENЯ представлял, что могу использовать соединение?Как это сделать?Я хотел бы позвонить только один раз в суб-дело, когда.

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете использовать CTE для определения, а затем использовать его в своем запросе:

;with amount as (
   select monthId, RefYearId AS Year, CASE WHEN @Amount = 'NETEXT' THEN NetExternalExcPcEuroBudget 
   WHEN @Amount = 'NETAGENCY' THEN NetAgencyIncPcEuroBudget
   ELSE NetAgencyIncPcEuroBudget + NetExternalExcPcEuroBudget
    END amount
from [dbo].[FactMonthlyConfirmationDashboard]
)
SELECT  CASE WHEN MonthId in (1,2,3) THEN sum(amount.amount)END AS Q1,
    CASE WHEN MonthId in (4,5,6) THEN sum(amount.amount)END AS Q2,
    CASE WHEN MonthId in (7,8,9) THEN sum(amount.amount)END AS Q3,
    CASE WHEN MonthId in (10,11,12) THEN sum(amount.amount)END AS Q4,
    monthId, 
    RefYearId AS Year
FROM [dbo].[FactMonthlyConfirmationDashboard]
        inner join amount on [FactMonthlyConfirmationDashboard].monthId = amount.monthId and [FactMonthlyConfirmationDashboard].RefYearId = amount.year
group by FactMonthlyConfirmationDashboard.monthId, FactMonthlyConfirmationDashboard.RefYearId;
...