求高手指点 合计数据的SQL语句 在线等 超级变态的合计。
又表格结构如下:
创建表格:CREATE TABLE [dbo].[TableAB]( [ID] [int] IDENTITY(1,1) NOT NULL,-- [BMName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,--部门名称 [BMCode] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,--部门大类代码:总部 [SmallBMCode] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,--部门小类代码:小部 [EType] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,--种类类型 [EDatetime] [datetime] NULL--日期) ON [PRIMARY]--插入测试数据:insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第一小部','ID001','SM001','A','2012-01-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第一小部','ID001','SM001','B','2011-03-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第一小部','ID001','SM001','C','2012-01-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第一小部','ID001','SM001','B','2011-05-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第一小部','ID001','SM001','C','2012-01-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第一小部','ID001','SM001','A','2012-07-02')--------------------------------------------------insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第二小部','ID001','FM002','C','2012-01-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第二小部','ID001','SM002','A','2011-02-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第二小部','ID001','SM002','B','2012-01-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第二小部','ID001','SM002','A','2011-02-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第一总部第二小部','ID001','SM002','B','2012-01-02')---------------------------------------------------insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第一小部','ID002','FM001','A','2012-03-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第一小部','ID002','FM001','C','2011-01-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第一小部','ID002','FM001','B','2012-04-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第一小部','ID002','FM001','A','2011-01-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第一小部','ID002','FM001','C','2011-06-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第一小部','ID002','FM001','A','2012-01-02')--------------------------------------------------insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第二小部','ID002','FM002','A','2012-01-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第二小部','ID002','FM002','C','2011-10-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第二小部','ID002','FM002','A','2012-01-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第二小部','ID002','FM002','C','2011-11-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第二小部','ID002','FM002','B','2012-01-02')---------------------------------------------------insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第三小部','ID002','FM003','B','2012-12-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第三小部','ID002','FM003','C','2011-09-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第三小部','ID002','FM003','A','2012-01-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第三小部','ID002','FM003','A','2011-08-02')insert into TableAB(BMName,BMCode,SmallBMCode,EType,EDatetime) values('第二总部第三小部','ID002','FM003','C','2012-01-02')
部门 2012年1-2月 小计 总部小计 2011年1-2月同期 小计 总部小计 同期小部比较 同期总部比较 A B C A B C 第一总部第一小部 5 2 2 9 24 3 2 2 7 15 2 9第一总部第二小部 7 4 4 15 4 1 3 8 -7 第二总部第一小部 6 6 7 19 45 5 6 4 15 50 4 -5第二总部第二小部 3 3 9 15 6 7 5 18 -3 第二总部第三小部 2 7 2 11 7 4 6 17 -6 合计 23 22 24 69 69 25 20 20 65 65 -10 4
select A.smallbmcode,A.bmname,(select count(*) from tableab where smallbmcode=A.smallbmcode and EType='A' and edatetime between ... and ...) sA,(select count(*) from tableab where smallbmcode=A.smallbmcode and EType='B' and edatetime between ... and ...) sB,(select count(*) from tableab where smallbmcode=A.smallbmcode and EType='C' and edatetime between ... and ...) sC,....这里插入依次插入去年的统计A.bmsfrom(select smallbmcode,bmname,count(*) bms from tableab group by smallbmcode,bmname) as A
[解决办法]
最后显示的结果,用SSRS很容易做。如果单纯用T-SQL写,比较麻烦了。