繁体   English   中英

案例当带回两条线而不是一条线时

[英]Case When bringing back two lines rather than one

大家好我有一些我正在研究的代码,我需要做的事情我确定相对​​容易,但我在Case声明上苦苦挣扎

我需要做什么; 将数据集转回到SSRS中的表格中,按年份拆分,然后按使用月份划分,然后按计费等级划分

问题; 计费等级为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和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

正如您所看到的,所有总和和数据匹配,在计算时计算出Case案件中最初(172)缺少的耗材

这里的任何帮助将不胜感激

干杯

当您在COUNT函数中使用DISTINCT时,如下所示 -

 SuppliesBilled = COUNT(DISTINCT c.CoreMPAN)

如果有多个具有相同值的c.CoreMPAN可用,则减少COUNT的数量。 锄头你知道吗 如果不是这样,您可以尝试从COUNT中删除DISTINCT命令,如下所示 -

 SuppliesBilled = COUNT(c.CoreMPAN)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM