2014-09-01 64 views
1

我有一個表2列... 它們是:我怎樣才能獲得百分(%)列使用TSQL代碼

HCode   No_of contacts 
AA1    78 
AA2    10 
AA3    09 
AA4    14 
AA5    10 
AA1    21 

我寫了下面的代碼:

select HCode, Sum(No_of contacts) as NoOFContacts 
from #T 
Group by HCode 
order by HCode 

使用上面的代碼,我如何根據max填充百分比列([No_of contacts])?

+0

儘管這個問題有一個公認的答案我很好奇,以什麼期望輸出會是這樣,因爲輸出從被接受的答案對我來說沒有任何意義(但也許我只是愚蠢的)。 – jpw 2014-09-01 15:10:32

回答

0

您可以使用Analytical functions獲取合同的最大數量,而不必單獨做subuery得到這個:

CREATE TABLE #T (HCode VARCHAR(3), No_of_contacts INT); 

INSERT #T (HCode, No_of_contacts) 
VALUES ('AA1', 78), ('AA2', 10), ('AA3', 09), 
     ('AA4', 14), ('AA5', 10), ('AA1', 21); 

SELECT HCode, 
     No_of_contacts, 
     PercentOfContracts = 100.0 * No_of_contacts/MAX(No_of_contacts) OVER() 
FROM ( SELECT HCode, 
        No_of_contacts = SUM(No_of_contacts) 
      FROM #T 
      GROUP BY Hcode 
     ) AS t; 
1

也許這就是你想要的?

select 
    HCode, 
    Sum([No_of contacts]) as NoOFContacts, 
    Sum([No_of contacts])*100/(select Sum([No_of contacts]) from #t) as Percentage 
from #t 
Group by HCode 
order by HCode 

這將呈現以下結果:

HCode  NoOFContacts Percentage 
---------- ------------ ----------- 
AA1  99   69 
AA2  10   7 
AA3  9   6 
AA4  14   9 
AA5  10   7 

(5 row(s) affected) 
0

你可以做到這一點與嵌套SQL語句

select Hcode, (NumberAcc/SumAcc)*100 as Percentage, Sumacc 
from 
(select Hcode, Sum(no_Of contacts) as SumAcc, no_OfContacts as NumberAcc 
from #t 
group by HCode, no_OfContacts) as T 
+0

嗨朋友對不起,我需要得到基於最大百分比(No_of_Contacts)!!!!!!!!!!!!!!!!選擇 HCode, SumO([No_of contacts])爲NoOFContacts, Sum([No_of contacts])* 100 /(從#t選擇Max(Sum([No_of contacts]))百分比 from #t Group由HCode order by HCode錯誤:無法對包含聚合或子查詢的表達式執行聚合函數。 我收到上面的錯誤請找到,請給我想法,我會感激你的時間。謝謝你的進步 – 2014-09-01 10:01:06

+0

你不能做一個雙重的聚合,你可以通過把總和放在一個CTE中,然後從中獲得一個最大值,但我不相信這是你必須做的事情。或者你需要MAX,這是你列中的最高值。總和是您列中所有值的總和。 – 2014-09-01 10:08:25

0

您可以用下面的查詢嘗試:

select HCode,Sum(No_of contacts) as NoOFContacts,(Sum(No_of contacts)*100/(Select Count(*) from #T)) as Percentage 
from #T 
group by HCode 
order by HCode