好贷网好贷款

高手们帮帮忙看看怎么写这个SQL 50CSDN]

发布时间:2016-12-5 10:29:13 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"高手们帮帮忙看看怎么写这个SQL 50CSDN]",主要涉及到高手们帮帮忙看看怎么写这个SQL 50CSDN]方面的内容,对于高手们帮帮忙看看怎么写这个SQL 50CSDN]感兴趣的同学可以参考一下。

表结构如下: DptID--部门号   Month--月份   Money --营业额 求一条SQL得出以下结果: 部门号  季度营业金额   季度

----------看一下例子 --以下问题如果当字段ID不是按规则递增时,结果就不对了 ------可以通过增加临时表,加一个规则递增的字段就ok了 ---------------------------------------------------------------------------------------------------------------------------------- declare @t table(id int,name varchar(4),a int,b int,c int,d int,e int) insert into @t select 1 ,'一',2,1,8,5,2  insert into @t select 2 ,'二',2,4,3,3,2 insert into @t select 3 ,'三',3,6,1,5,1 insert into @t select 4 ,'四',3,2,0,6,4  insert into @t select 5 ,'五',2,9,8,7,3 insert into @t select 6 ,'六',4,1,1,1,2 insert into @t select 7 ,'七',1,1,3,1,2   insert into @t select 8 ,'八',9,2,1,1,9 insert into @t select 9 ,'九',5,3,3,8,7 insert into @t select 10,'十',8,4,3,0,0 select      id,     name=(case when (id-1)/3 is null then '合计' when id is null then '小计' else name end),     a=sum(a),     b=sum(b),     c=sum(c),     d=sum(d),     e=sum(e) from      @t group by     (id-1)/3,id,name with rollup having grouping(name)=1 and grouping(id)=1

----如果月份是数值型 declare @t table(DptID varchar(10),[Month] int,[Money] money) insert @t select '1',6,100 union all select '1',7,100 union all select '1',8,100 union all select '2',6,100 union all select '2',7,100  SELECT DptID as 部门号,sum([Money]) as 季度营业额, 季度 =  case  when [Month] in(1,2,3) then 1 when [Month] in(4,5,6) then 2 when [Month] in(7,8,9) then 3 when [Month] in(10,11,12) then 4 end FROM @t group by DptID, case  when [Month] in(1,2,3) then 1 when [Month] in(4,5,6) then 2 when [Month] in(7,8,9) then 3 when [Month] in(10,11,12) then 4 end ORDER BY 1 GO ----如果月份是字符型 declare @t table(DptID varchar(10),[Month] varchar(8),[Money] money) insert @t select '1','200606',100 union all select '1','200607',100 union all select '1','200608',100 union all select '2','200606',100 union all select '2','200607',100  SELECT DptID as 部门号,sum([Money]) as 季度营业额, 季度 = datepart(qq,cast([Month] + '01' as datetime)) FROM @t group by DptID,datepart(qq,cast([Month] + '01' as datetime)) ORDER BY 1

我那个把月份化成季度的应该怎么转换  我这样写 成吗  ? select Dptid as '部门号',sum(money) as '季度营业金额',季度= case when month/3 <=1 then 1 when month/3<=2 then 2 when month/3<=3 then 3 else 4 end from table  group by Dptid,convert(int,month/3 ) 请帮我看看   我这里没有机器

declare @T1 table (DptID int,[Month] int,[Money] decimal(8,2)) insert into @T1 select 1,1,100.02 union all select 2,2,105.54 union all select 2,3,500 union all select 4,1,800 union all select 1,5,7888 select * from @T1 declare @T2 table([季度] int) insert into @T2 select 1 union all select 2 union all select 3 union all select 4 --select * from (select distinct [DptID] from @T1) as a cross join @T2 select b.*, [季度营业金额]=isnull((case b.[季度]  when 1  then (select sum(isnull([Money],0)) from @T1 where DptID=b.DptID and [month]<4 ) when 2 then (select sum(isnull([Money],0)) from @T1 where  DptID=b.DptID and [month]<7 and [month]>3 ) when 3 then (select sum(isnull([Money],0)) from @T1 where DptID=b.DptID and [month]<10 and [month]>6 ) when 4 then (select sum(isnull([Money],0)) from @T1 where DptID=b.DptID and [month]>9  ) end),0.00)   from  (select * from (select distinct [DptID] from @T1) as a cross join @T2) as b

用整除取余数的函数 结合INT函数和Group函数就可以了

mark

select dptid , sum(case when [month] between 1 and 3 then money else 0 end ) as '季度营业金额' , 1 as '季度' from table group by dpt union select dpt , sum(case when [month] between 4 and 6 then money else 0 end ) as '季度营业金额' , 2 as '季度' from table group by dpt union select dptid , sum(case when [month] between 7 and 9 then money else 0 end ) as '季度营业金额' , 3 as '季度' from table group by dpt union select dpt , sum(case when [month] between 10 and 12 then money else 0 end ) as '季度营业金额' , 4 as '季度' from table group by dpt

select dptid , sum(case when [month] between 1 and 3 then money else 0 end ) as '季度营业金额' , 1 as '季度' from table group by dptid union select dptid , sum(case when [month] between 4 and 6 then money else 0 end ) as '季度营业金额' , 2 as '季度' from table group by dptid union select dptid , sum(case when [month] between 7 and 9 then money else 0 end ) as '季度营业金额' , 3 as '季度' from table group by dptid union select dptid , sum(case when [month] between 10 and 12 then money else 0 end ) as '季度营业金额' , 4 as '季度' from table group by dptid

我上面第一个DPT写错了,应该是DPTID,不好意思.

up

学习

謝謝大家的支持!

上一篇:如何在SQL2005中运行isqlw? 66xcom]
下一篇:请教数据库集群的问题。 20pqda]

相关文章

相关评论