2012-10-17 220 views
1

任何人都可以幫助我計算SQL中的運行百分比嗎?假設我們有以下數據:在SQL中計算運行百分比

column 1 column 2 
    1   500 
    2   499 
    3   200 
    4   50 
    5   10 
    6   5 

我想知道第2列佔什麼比例佔80%。在這個例子中,第2列的總和是12664。前三排佔94%:(500+499+200)/sum(column 2) = 94%。在此之後,我將得出結論,3/6 =行使總數爲80%。

如何在SQL中執行此操作?

+0

我建議你修改你的問題,因爲它有一個很少有問題使人們不太可能想要投入時間尋找答案。首先,研究[格式化](http://stackoverflow.com/editing-help)問題,我建議您將樣例數據集格式化爲代碼。我們到目前爲止所嘗試過的,你有什麼代碼,以及爲什麼你當前的解決方案不起作用。第三是mino如果可以的話,請回顧一下你的拼寫,語法,交互作用和你的問題的「流程」(如果需要的話,可以自己閱讀)。 – Jeroen

+0

嗨Jeroen,希望現在有意義 – Gurru

+0

它更有意義。我試圖通過編輯和進一步改進您的問題來提供幫助。如果您覺得我犯了一個錯誤,請隨時重新編輯它。你可以澄清的最後一件事:你爲什麼在問題標題和標籤中提到「SSRS」?這個問題本身似乎主要是關於SQL。 SSRS表達式的回答也可以接受嗎? – Jeroen

回答

4

你只是有一個重複的this question on running totals,但你必須擴大答案來計算運行百分比。我建議您閱讀鏈接問題的答案(請注意MSSQL 2012具有SUM...OVER語法,歡呼!),因爲它們比我的建議更深入。

對於你的情況,你可以做這樣的事情得到一個正在運行的百分比:

DECLARE @table TABLE(col1 INT, col2 FLOAT); 

INSERT INTO @table (col1, col2) 
VALUES (1, 500), (2, 499), (3, 200), (4, 50), (5, 10), (6, 5) 

DECLARE @col2total FLOAT = (SELECT SUM(col2) FROM @table) 

-- Using subqueries 
SELECT  col1, 
      col2, 
      (SELECT SUM(col2) FROM @table sub WHERE sub.col1 <= base.col1) 
      /@col2total 
      * 100 AS RunningPercentage 
FROM  @table base 
ORDER BY col1 

-- Using cross join 
SELECT  t1.col1, 
      t1.col2, 
      SUM (t2.col2) RunningTotal, 
      SUM (t2.col2)/@col2total * 100 RunningPercentage 
FROM  @table t1 CROSS JOIN @table t2 
WHERE  t1.col1 >= t2.col1 
GROUP BY t1.col1, t1.col2 
ORDER BY t1.col1 

有了這個應該很容易得到的頂部或底部80%的任何你想要的方式。

+1

非常感謝Jeroen,它工作得很好 – Gurru

0

該腳本需要對初始值進行硬編碼。我到底該如何使用SQL語句從SQL數據庫中的表中提取值?

換句話說,來自: INSERT INTO @table(COL1,COL2) VALUES(1,500),(2,499),(3,200),(4,50),(5,10 ),(6,5)

從下面的[表名稱]去掉「值」片與內替代它「選擇[字段名稱]