Случай При возвращении двух строк, а не одной - PullRequest
0 голосов
/ 10 июня 2019

Привет всем, у меня есть какой-то код, над которым я работаю, и то, что мне нужно сделать, я уверен, что это относительно легко, однако я борюсь за утверждение Case

Что мне нужно сделать; Верните набор данных в таблицу в SSRS, разделите на год, затем месяц использования, затем на уровень выставления счетов

Issue; Уровни выставления счетов 0,1,4,5 0 - исторические данные, и мне нужно показать это как 1, затем добавить 0 и исходный уровень 1 вместе

Что я сделал до сих пор;

DECLARE @UsageMonth DATE = '20170401'
DECLARE @YEAR INT = '2017'
DECLARE @BillingTier2 INT = 1;

SELECT  YEAR(UsageMonth) AS [Year],
        UsageMonth,
        --Billingtier,
        CASE WHEN billingtier = 0 THEN 1 ELSE billingtier END AS BillingTier2,
        SuppliesBilled = COUNT(DISTINCT c.CoreMPAN),
        CreditKwH = SUM(CASE WHEN c.IsCredit = 1 THEN c.ConsumptionUnits ELSE 0 END),
        DebitKwH = SUM(CASE WHEN c.IsCredit = 0 THEN c.ConsumptionUnits ELSE 0 END),
        TotalKwh = SUM(c.ConsumptionUnits),
        CreditAmount = SUM(CASE WHEN c.IsCredit = 1 THEN c.ConsumptionAmount ELSE 0 END),
        DebitAmount = SUM(CASE WHEN c.IsCredit = 0 THEN c.ConsumptionAmount ELSE 0 END),
        TotalAmount= SUM(c.ConsumptionAmount),
        UnitRate = SUM(c.ConsumptionAmount) / NULLIF(SUM(c.ConsumptionUnits), 0),
        StandingCharge = SUM(c.StandingChargeAmount),
        CCL = SUM(c.CCLAmount)

FROM    dbo.table1 c
WHERE YEAR(UsageMonth) = @YEAR
AND UsageMonth = @UsageMonth
GROUP BY YEAR(UsageMonth), UsageMonth, Billingtier, CASE WHEN billingtier = 0 THEN 1 ELSE billingtier END

Проблема, с которой я столкнулся, заключается в том, что при этом возвращаются оба столбца, которые ранее были 0 как 1, на одной строке, а также другая строка, где уровень выставления счетов равен фактически 1, что дает мне две строки для «1», где должна быть одна строка с обоими уровнями выставления счетов 1 и 0, сложенными вместе

Ожидаемые данные

Year    UsageMonth  BillingTier2    SuppliesBilled  CreditKwH   DebitKwH    TotalKwh    CreditAmount    DebitAmount TotalAmount UnitRate    StandingCharge  CCL
2017    01/04/2017  1   3296    -4348786.008    7219573.706 2870787.699 -523979.1005    866478.4812 342499.3807 0.238118    22394.5114  10685.7546
2017    01/04/2017  4   27  -59415.7663 65843.4963  6427.73 -9269.5841  10359.9353  1090.3512   0.169632    118.5181    21.3836
2017    01/04/2017  5   515 -524035.4192    943647.2675 419611.8483 -105349.1449    189478.524  84129.3791  0.200493    6581.5  1567.7762

Получение данных

Year    UsageMonth  BillingTier2    SuppliesBilled  CreditKwH   DebitKwH    TotalKwh    CreditAmount    DebitAmount TotalAmount UnitRate    StandingCharge  CCL
2017    01/04/2017  1   3124    -4348786.008    7219573.706 2870787.699 -523979.1005    866478.4812 342499.3807 0.119305    22394.5114  10685.7546
2017    01/04/2017  4   27  -59415.7663 65843.4963  6427.73 -9269.5841  10359.9353  1090.3512   0.169632    118.5181    21.3836
2017    01/04/2017  5   515 -524035.4192    943647.2675 419611.8483 -105349.1449    189478.524  84129.3791  0.200493    6581.5  1567.7762

Как видите, все суммы и данные совпадают, за исключением того, что Расходы, выставленные как 0, изначально отсутствовали (172) в операторе Case при подсчете

Любая помощь здесь будет принята с благодарностью

Приветствия

1 Ответ

0 голосов
/ 10 июня 2019

Поскольку вы используете DISTINCT внутри функции COUNT, как показано ниже -

 SuppliesBilled = COUNT(DISTINCT c.CoreMPAN)

Уменьшает количество COUNT, если существует несколько доступных c.CoreMPAN с одинаковым значением.Мотыга, вы знаете об этом.Если это не ожидается, вы можете попробовать удалить команду DISTINCT из COUNT, как показано ниже:

1005 *
...