日期:2014-05-18 浏览次数:20736 次
if object_id('[FGSSB]') is not null drop table [FGSSB] go create table [FGSSB]([XRQ] datetime,[RGL] int,[JCMC] varchar(8)) insert [FGSSB] select '2012-04-01',26896,'二分公司' union all select '2012-04-01',22330,'三分公司' union all select '2012-04-01',25919,'四分公司' union all select '2012-04-02',26913,'二分公司' union all select '2012-04-02',22267,'三分公司' union all select '2012-04-02',25355,'四分公司' union all select '2012-04-03',26527,'二分公司' union all select '2012-04-03',22442,'三分公司' union all select '2012-04-03',25934,'四分公司' union all select '2012-04-04',27043,'二分公司' union all select '2012-04-04',22678,'三分公司' union all select '2012-04-04',25918,'四分公司' union all select '2012-04-05',26764,'二分公司' union all select '2012-04-05',23056,'三分公司' union all select '2012-04-05',26858,'四分公司' go -->数据查询: declare @sql varchar(8000) select @sql=isnull(@sql+',','') +'sum(case when jcmc='''+jcmc+''' then rgl else 0 end) as ['+jcmc+']' from (select distinct jcmc from FGSSB) t set @sql='select isnull(convert(varchar(10),xrq,120),''竖向求和'') as xrq,'+@sql +',sum(rgl) as [横向和] from FGSSB group by convert(varchar(10),xrq,120) with rollup' exec (@sql) /** xrq 二分公司 三分公司 四分公司 横向和 ---------- ----------- ----------- ----------- ----------- 2012-04-01 26896 22330 25919 75145 2012-04-02 26913 22267 25355 74535 2012-04-03 26527 22442 25934 74903 2012-04-04 27043 22678 25918 75639 2012-04-05 26764 23056 26858 76678 竖向求和 134143 112773 129984 376900 (6 行受影响) **/
------解决方案--------------------
IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb GO CREATE TABLE tb (XRQ datetime, RGL int, JCMC nvarchar(48)) go INSERT INTO tb SELECT '2012-04-01', 26896, '二分公司' UNION ALL SELECT '2012-04-01', 22330 , '三分公司' UNION ALL SELECT '2012-04-01', 25919 , '四分公司' UNION ALL SELECT '2012-04-02', 26913 , '二分公司' UNION ALL SELECT '2012-04-02', 22267 , '三分公司' UNION ALL SELECT '2012-04-02', 25355 , '四分公司' UNION ALL SELECT '2012-04-03', 26527 , '二分公司' UNION ALL SELECT '2012-04-03', 22442 , '三分公司' UNION ALL SELECT '2012-04-03', 25934 , '四分公司' UNION ALL SELECT '2012-04-04', 27043 , '二分公司' UNION ALL SELECT '2012-04-04', 22678 , '三分公司' UNION ALL SELECT '2012-04-04', 25918 , '四分公司' UNION ALL SELECT '2012-04-05', 26764 , '二分公司' UNION ALL SELECT '2012-04-05', 23056 , '三分公司' UNION ALL SELECT '2012-04-05', 26858 , '四分公司'; ;with T as ( select * from tb pivot ( max(RGL) for JCMC in(二分公司, 三分公司, 四分公司) ) a ) select T.*, [日合计]= [二分公司] + [三分公司] + [四分公司] from T union all select Null, sum([二分公司]), sum([三分公司]),sum([四分公司]), sum([二分公司])+ sum([三分公司])+sum([四分公司]) from T /* XRQ 二分公司 三分公司 四分公司 日合计 ----------------------- ----------- ----------- ----------- ----------- 2012-04-01 00:00:00.000 26896 22330 25919 75145 2012-04-02 00:00:00.000 26913