【问题标题】:Order By Percent Decreasing按百分比递减排序
【发布时间】:2021-06-24 20:06:26
【问题描述】:

代码:

SELECT [1_Tbl_Claim_Data].Customer, Sum([1_Tbl_Claim_Data].ClaimUSD) AS ClaimedAmount, Sum([1_Tbl_Claim_Data].POReimbursementAmountUSD) AS RmbtAmount, Format(Sum(POReimbursementAmountUSD)*100/Sum(ClaimUSD),"Fixed") AS ["%"]
FROM 1_Tbl_Claim_Data
GROUP BY [1_Tbl_Claim_Data].Customer
ORDER BY Format(Sum(POReimbursementAmountUSD)*100/Sum(ClaimUSD),"Fixed") DESC;

当我尝试按百分比表达式订购我的 qry 时,我收到 溢出错误。 问题是一些报销金额为零,所以我猜这是导致溢出错误,当一个数字被零除 提前致谢

【问题讨论】:

  • 没有看到数据,没有太多的帮助。但是,ClaimUSD 可能永远为零吗?这可能值得检查。

标签: sql ms-access


【解决方案1】:

试试这个:

SELECT  Customer
       ,Sum(ClaimUSD) AS ClaimedAmount 
       ,Sum(POReimbursementAmountUSD) AS RmbtAmount
       ,Format(Sum(POReimbursementAmountUSD)*100/Sum(ClaimUSD),"Fixed") 
        AS ["%"]
FROM 1_Tbl_Claim_Data
GROUP BY 1
ORDER BY 4 DESC;

【讨论】:

    【解决方案2】:

    您需要测试 SUM(ClaimUSD) 是否为 0。

    另外,您是否真的打算按百分比降序按字母顺序

    99%
    9%
    81%
    22%
    2%
    12%
    100%
    10%
    1%
    

    我假设你真的想按数值排序。

    SELECT [1_Tbl_Claim_Data].Customer
    , Sum([1_Tbl_Claim_Data].ClaimUSD) AS ClaimedAmount
    , Sum([1_Tbl_Claim_Data].POReimbursementAmountUSD) AS RmbtAmount
    , Format(
        case
            when sum(ClaimUSD) <> 0
                then Sum(POReimbursementAmountUSD)*100/Sum(ClaimUSD)
        end ,"Fixed") AS ["%"]
    FROM 1_Tbl_Claim_Data
    GROUP BY [1_Tbl_Claim_Data].Customer
    ORDER BY case
            when sum(ClaimUSD) <> 0
                then Sum(POReimbursementAmountUSD)*100/Sum(ClaimUSD)
        end DESC;
    

    ...但我需要数据进行测试。这段代码可能有很多问题。

    【讨论】:

    • 它们不必按字母顺序排列,只需百分比降序。一些 rbmt 金额将为零,所以我相信这就是导致溢出错误的原因
    • 0/1 = 0,所以这不会导致错误。 ClaimedAmount = 0 更有可能导致问题。这就是CASE 语句要处理的内容。您的代码尝试按字母顺序排序。我的按数字排序。
    【解决方案3】:

    尝试按数值排序:

    SELECT 
        Customer, 
        Sum(ClaimUSD) AS ClaimedAmount, 
        Sum(POReimbursementAmountUSD) AS RmbtAmount, 
        Sum(POReimbursementAmountUSD)/Sum(ClaimUSD) AS [Percent],
        Format(Sum(POReimbursementAmountUSD)*100/Sum(ClaimUSD),"Fixed") AS ["%"]
    FROM 
        [1_Tbl_Claim_Data]
    GROUP BY 
        Customer
    ORDER BY 
        Sum(POReimbursementAmountUSD)/Sum(ClaimUSD) DESC;
    

    【讨论】:

      猜你喜欢
      • 2023-02-06
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 2022-06-15
      • 2015-08-13
      • 1970-01-01
      • 2021-06-15
      • 2021-10-22
      相关资源
      最近更新 更多