当前位置: 代码迷 >> Sql Server >> 求sql语句,实现展示的每条记录后面都加一列,显示其数量占总数的百分比
  详细解决方案

求sql语句,实现展示的每条记录后面都加一列,显示其数量占总数的百分比

热度:14   发布时间:2016-04-24 10:41:36.0
求sql语句,实现显示的每条记录后面都加一列,显示其数量占总数的百分比
select type ,sum(value) as value  from (
select 'a'as type,1 as value
union all select 'a',2
union all select 'b',1
union all select 'b',3
union all select 'c',5  ) a
group by type
------------
type value
a 3
b 4
c 5
------------
但是我想显示的是这样:
type value sum bl
a 3 12 25%
b 4 12 33.3%
c 5 12 41.67%
请问如何实现

------解决方案--------------------

with temp as(select * from Table11)
select Name,count(Name) 数量,CONVERT(decimal(18,2), COUNT(Name)*100.0/(select COUNT(Name) from temp)) 所占百分比 from temp group by Name,Content


------解决方案--------------------
;with t
as(
select 'a'as type,1 as value
union all select 'a',2
union all select 'b',1
union all select 'b',3
union all select 'c',5  
)

SELECT  type,value,SumValue AS [sum],CONVERT(VARCHAR,ROUND(CONVERT(FLOAT,Value)/CONVERT(FLOAT,SumValue)*100,2))+'%' AS lr  FROM
(
SELECT  type,SUM(Value) Value,(SELECT SUM(value) FROM t) SumValue FROM t GROUP BY type

)a

 
 /*
 type value       sum         lr
---- ----------- ----------- -------------------------------
a    3           12          25%
b    4           12          33.33%
c    5           12          41.67%

(3 行受影响)

 */
 

------解决方案--------------------

--在sqlserver2012 下有用的语句
select distinct type ,sum(a.value) over( partition by type )as value,sum(a.value) over() as rn
,cast(cast(sum(a.value) over( partition by type )*1.0/sum(a.value) over() *100 as decimal(9,2)) as varchar)+'%'
from (
select 'a'as type,1 as value
union all select 'a',2
union all select 'b',1
union all select 'b',3
union all select 'c',5  ) a



--结果展示
/*
type value       rn          
---- ----------- ----------- -------------------------------
a    3           12          25.00%
b    4           12          33.33%
c    5           12          41.67%

(3 行受影响)


*/
  相关解决方案