簡體   English   中英

如何計算具有不同條件的同一列的不同值的百分比

[英]How to calculate a percentage on different values from same column with different criteria

我正在嘗試在 SSRS 中編寫一個查詢(使用 SQL)來計算每個月的損益表銷售額百分比(年份是用戶在運行時選擇的參數)。 但是,我必須用於數據的表格列出了所有年、月、帳戶、美元等,如下所示:

ACCT_YEAR ACCT_PERIOD 帳戶ID CREDIT_AMOUNT
2021年 1個 4000 20000
2021年 2個 4000 25000
2021年 1個 5000 5000
2021年 2個 5000 7500
2021年 1個 6000 4000
2021年 2個 6000 8000

等等等等(ACCOUNT_ID =4000恰好是銷售賬號)

例如,我需要計算

CREDIT_AMOUNT when ACCT_YEAR = 2021, ACCT_PERIOD=1, and ACCOUNT_ID=5000
/
CREDIT_AMOUNT when ACCT_YEAR = 2021, ACCT_PERIOD=1, and ACCOUNT_ID=4000

* 100

然后,我將為 ACCT_YEAR 中的每個 ACCT_PERIOD 執行此操作。 希望這是有道理的......我想要的是這樣的:

ACCT_YEAR ACCT_PERIOD 帳戶ID 百分比
2021年 1個 5000 0.25
2021年 2個 5000 0.30
2021年 1個 6000 0.20
2021年 2個 6000 0.32

我正在嘗試創建一個圖表來顯示大約 10 個不同帳戶的銷售額百分比(我知道他們的特定 account_ID 並將按這些 ID 進行過濾)並使用折線圖小部件按月顯示趨勢。
我嘗試過 CASE 場景、OVER 場景和嵌套子查詢。 我覺得這應該很簡單,但我很冷靜,沒有看到明顯的解決方案。 有什么建議么? 謝謝!

您只需使用一個矩陣,其中父列組用於 ACCT_YEAR,子列組用於 ACCT_PERIOD。 然后你可以使用你的計算。 如果將文本框格式化為百分比,則不需要將其乘以 100。

文本框值: =IIF(ACCOUNT_ID=4000, Sum(CREDIT_AMOUNT), 0) = 0, 0, IIF(ACCOUNT_ID=5000, Sum(CREDIT_AMOUNT), 0) / IIF(ACCOUNT_ID=4000, Sum(CREDIT_AMOUNT), 0)

需要注意的一個重要行為是 window 函數在 where 子句之后應用。

因為您需要在任何 where 子句(將過濾掉帳戶 4000)之前應用 window 函數,所以需要在一個 scope 中使用它們,而在另一個 scope 中使用 where 子句。

WITH
  perc AS
(
  SELECT
    *,
    credit_amount * 100.0
    /
    SUM(
      CASE WHEN account_id = 4000 THEN credit_amount END
    )
    OVER (
      PARTITION BY acct_year, accr_period
    )
      AS credit_percentage
  FROM
    your_table
)
SELECT
  *
FROM
  perc
WHERE
  account_id IN (5000,6000)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM