日期:2014-05-18 浏览次数:20435 次
--主表(类型)结构 Create table #tb_type ( id int identity(1,1), name nvarchar(50)--名称 ) --子表(记录表)结构 Create table #tb_record ( id int identity(1,1), typeid int--外键 ) --测试数据 insert into #tb_type values(N'类别1') insert into #tb_type values(N'类别2') insert into #tb_type values(N'类别3') insert into #tb_record values(1) insert into #tb_record values(1) insert into #tb_record values(1) insert into #tb_record values(2) insert into #tb_record values(2) go SELECT a.name,STR(count(b.ID)*100.0/c.con,2,0)+'%' FROM #tb_type AS a LEFT JOIN #tb_record AS b ON a.ID=b.typeid CROSS JOIN (SELECT COUNT(*) AS con FROM #tb_record) AS c GROUP BY a.name,c.con
------解决方案--------------------
select a.name as 类别名称, isnull(ltrim(cast(count(b.typeid)*100.0/(select count(1) from #tb_record) as dec(18,0))+'%','0%') from #tb_type a,#tb_record b where a.id=b.typeid group by a.name
------解决方案--------------------
SELECT a.name AS 类别名称,STR(count(b.ID)*100.0/c.con,2,0)+'%' AS 百分比 FROM #tb_type AS a LEFT JOIN #tb_record AS b ON a.ID=b.typeid CROSS JOIN (SELECT COUNT(*) AS con FROM #tb_record) AS c GROUP BY a.name,c.con /* 类别名称 百分比 类别1 60% 类别2 40% 类别3 0% */
------解决方案--------------------
select a.name as 类别名称, isnull(ltrim(cast(count(b.typeid)*100.0/(select count(1) from #tb_record) as dec(18,0))+'%','0%') from #tb_type a left join #tb_record b on a.id=b.typeid group by a.name