日期:2014-05-18 浏览次数:20415 次
declare @test table(n int, item nvarchar(10)) insert @test select 0,'A001' union all select 100,'B001' union all select 100,'C001' union all select 100,'D001' union all select 0,'E001' union all select 0,'F001' union all select -1,'I001' union all select -1,'J001' n的值只有100,0和-1三种情况 需要sum(n<>-1)/count(n<>-1) 只汇总n不等于-1的值然后求平均值 然后放在第三列 结果如下 n item result 0 A001 50 100 B001 50 100 C001 50 100 D001 50 0 E001 50 0 F001 50 -1 I001 50 -1 J001 50
declare @test table(n int, item nvarchar(10)) insert @test select 0,'A001' union all select 100,'B001' union all select 100,'C001' union all select 100,'D001' union all select 0,'E001' union all select 0,'F001' union all select -1,'I001' union all select -1,'J001' select *,result=(select sum(n) from @test where n<>-1)/(select count(*) from @test where n<>-1) from @test /* n item result ----------- ---------- ----------- 0 A001 50 100 B001 50 100 C001 50 100 D001 50 0 E001 50 0 F001 50 -1 I001 50 -1 J001 50 (8 行受影响) */
------解决方案--------------------
declare @test table(n int, item nvarchar(10)) insert @test select 0,'A001' union all select 100,'B001' union all select 100,'C001' union all select 100,'D001' union all select 0,'E001' union all select 0,'F001' union all select -1,'I001' union all select -1,'J001' select * ,(select sum(n) from @test where n<>-1)/(select count(*) from @test where n<>-1)as result from @test group by n,item (8 行受影响) n item result ----------- ---------- ----------- -1 I001 50 -1 J001 50 0 A001 50 0 E001 50 0 F001 50 100 B001 50 100 C001 50 100 D001 50 (8 行受影响)
------解决方案--------------------
select *, (select sum(n) from @test where n<>-1)/(select count(1) from @test where n<>-1) as result from @test