当前位置: 代码迷 >> Sql Server >> 怎么能查出如上的结果,百分百结贴,欢迎围观
  详细解决方案

怎么能查出如上的结果,百分百结贴,欢迎围观

热度:2   发布时间:2016-04-27 11:32:15.0
如何能查出如下的结果,百分百结贴,欢迎围观
编号 份数
1 100
2 300
3 600
上图是进行了一次group by形成的结果集,但现在的需求是要多查出一列,如下图
解释:占比就是 每个编号对应的数量 占总共份数的百分比

编号 份数 占比
1 100 10%
2 300 30%
3 600 60%

请问大家有什么好的方案,我用临时表,感觉查了俩便SQL效率差,百分百结贴,欢迎围观!

------解决方案--------------------
SQL code
;WITH T AS (SELECT 1 AS bh, 100 as num union allSELECT 2 ,300union allSELECT 3 ,600)select * ,num*1.0/(select sum(num) from t)from t/*bh          num         ----------- ----------- ---------------------------------------1           100         0.1000000000002           300         0.3000000000003           600         0.600000000000(3 行受影响)*/
------解决方案--------------------
SQL code
--> 测试数据:[tb]IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]GO CREATE TABLE [tb]([编号] INT,[份数] INT)INSERT [tb]SELECT 1,100 UNION ALLSELECT 2,300 UNION ALLSELECT 3,600--------------开始查询--------------------------SELECT *,LTRIM(CAST([份数]*100.0/SUM([份数]) OVER() AS DECIMAL(9,2)))+'%' FROM [tb]----------------结果----------------------------/* 编号          份数          ----------- ----------- ------------------------------------------1           100         10.00%2           300         30.00%3           600         60.00%(3 行受影响)*/
------解决方案--------------------
SQL code
if object_id('test') is not null drop table testgocreate table test([编号] int,[份数] int)goinsert into testselect 1,100 union allselect 2,300 union allselect 3,600godeclare @sum floatselect @sum=sum([份数]) from testselect [编号],convert(varchar,convert(float,[份数])[email protected]*100)+'%' 比例 from test/*(3 row(s) affected)编号          比例----------- -------------------------------1           10%2           30%3           60%(3 row(s) affected)*/
  相关解决方案