首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

where条件、group by all 和 rollup不能同时使用,那小弟我如何实现这个效果呢

2012-03-27 
where条件、group by all 和 rollup不能同时使用,那我怎么实现这个效果呢?ifexists(select*fromsysobjectsw

where条件、group by all 和 rollup不能同时使用,那我怎么实现这个效果呢?
if   exists(select   *   from   sysobjects   where   name= 'p_StatSale ')
drop   proc   p_StatSale
go
create   procedure   p_StatSale
    @StartDate   datetime,
    @EndDate   datetime
as
declare   @s   varchar(8000)
select   @s= 'select   组名=(case   when   grouping(b.组名)=1   then   ' ' ' '   when   grouping(b.姓名)=1   then   ' ' ' '   else   b.组名   end),
                      姓名=(case   when   grouping(b.组名)=1   then   ' '总计 ' '   when   grouping(b.姓名)=1   then   ' '合计 ' '   else   b.姓名   end) '
select   @s=@s+ ', '+quotename(txt, ' ' ' ')+ '=sum(case   车型   when   '+quotename(txt, ' ' ' ')+ '   then   1   else   0   end) '
                from   tb_car_type     where   depth=2   group   by   txt
select   @s=@s+ ',合计=count(车型)   from   vw_car_sale_stat   a   right   join   vw_saler_group   b   on   a.员工编号=b.员工编号
                where   销售时间   between   '+quotename(@StartDate, ' ' ' ')+ '   and   '+quotename(@EndDate, ' ' ' ')+ '   group   by     b.组名,b.姓名   with   rollup   '
print(@s)
exec(@s)
go

exec   p_StatSale   @StartDate= '2007-1-1 ',@EndDate= '2007-12-1 '

------------
相关表简单说明
tb_car_type:ID     Txt     ParentID     Depth
实际是一个双编号的车型树,Depth为2表示具体车型

vw_car_sale_stat:车号     车型     员工编号     销售时间

vw_saler_group:员工编号   组名
----------
要统计某段时间内所有销售员工所有车型的销售情况,没有销售记录的用零表示
大概效果如下:
组名     姓名       L4       L4+       GL3.5       GL     GL2.5     总计
展厅一部     张三       0           1             0             1         0           2
展厅一部     李四       1           0             0             0         0           1
                    合计       1         1             0           1           0           3
展厅二部     王五       0           0             0             1         0           1
                    合计       0         0             0           1           0           1
展厅三部     王六       0           0             0             0         1           1


                    合计       0           0             0           0           1           1
                    共计       1           1             0             2         1           5

要统计某段时间的就要用where   销售时间   between   ...   and   ...
没有销售记录的用零表示,那要用group   by   all吗?那这样好象where条件就失效了。。。
我还要显示分组统计,但是group   by   all和rollup也不能同时使用。该怎么办呢?
给个思路吧。。谢谢

[解决办法]
select @s=@s+ ',合计=count(车型) from vw_car_sale_stat a right join vw_saler_group b on a.员工编号=b.员工编号
where 销售时间 between '+quotename(@StartDate, ' ' ' ')+ ' and '+quotename(@EndDate, ' ' ' ')+ ' group by b.组名,b.姓名 with rollup '
----------------------------------------
改成:

select @s=@s+ ',合计=count(车型) from vw_car_sale_stat a right join vw_saler_group b on a.员工编号=b.员工编号
AND 销售时间 between '+quotename(@StartDate, ' ' ' ')+ ' and '+quotename(@EndDate, ' ' ' ')+ ' group by b.组名,b.姓名 with rollup '

热点排行