2014-09-01 58 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