读书人

大侠们高分接招啊SQL2000 按部门项目

发布时间: 2012-12-15 15:16:03 作者: rapoo

大侠们,高分接招啊SQL2000 按部门项目交叉表统计问题


现有表A 代码 名称
101 一部
10101 1组
10102 2组
。。
102
。。
801
80102

。。

QT
。。。。

表A记录不固定,后续有增加

表B 项目
T1
T2
T3

....

表B 项目数量也会动态变化

表C 如 日期 代码 项目 金额
201201 10101 T1 100
201201 10101 t6 20
。。。。
201201 80102 T1 50
201201 QT T11 90

201202 10201 T2 100
201203 10804 t19 20
201203 80102 T1 50
。。。。。。
表C中 代码和项目只在存在有金额时才有记录


现在需求 表M
表格式如: 代码 名称 t1 t2 t3 t4 .. 合计(t1+t2+t3+t4..) .. t10 t12 t13 .....合计 () ...总计 ()

101 一部
10101 一组
。。。


合计

按日期范围段来查询统计报表M。 代码名称需要包含表A的所有代码, 项目T1...需要全部显示出表B项目。为0也需要列出来。






[最优解释]
你这个很easy!其实最终要求是可以动态去将纵向数据《项目》转变为横排列,
然后多表联查数据得出结果!

你给出一份规范完整的演示数据SQL脚本。我来帮你写!
[其他解释]
没看懂。
[其他解释]
上一点结果的数据看看
[其他解释]

引用:
你这个很easy!其实最终要求是可以动态去将纵向数据《项目》转变为横排列,
然后多表联查数据得出结果!

你给出一份规范完整的演示数据SQL脚本。我来帮你写!

行项目需要显示项目表里所有的项目,列部门需要显示所有部门表里的部门。并且项目和部门都会有增加 而不是固定的的。
CREATE TABLE dbo.bm
(
dept_code NVARCHAR (20) NOT NULL,
dept_name NVARCHAR (40) NOT NULL,
is_last BIT DEFAULT (0) NOT NULL

)
GO

INSERT INTO bm VALUES ('101' ,'一部门','0')
INSERT INTO bm VALUES ('10101' ,'一组','1')
INSERT INTO bm VALUES ('10102' ,'二组','1')
INSERT INTO bm VALUES ('102' ,'二部门','1')
INSERT INTO bm VALUES ('801' ,'八部门','0')
INSERT INTO bm VALUES ('80101' ,'一组','1')
INSERT INTO bm VALUES ('80103' ,'三组','1')
INSERT INTO bm VALUES ('AAAAAA' ,'公共部门','1')

go




CREATE TABLE dbo.xm
(
cost_code VARCHAR (20) NOT NULL,
cost_name VARCHAR (40) NOT NULL,
PRIMARY KEY (cost_code)
)
GO

INSERT INTO xm VALUES ('0001' ,'项目一')
INSERT INTO xm VALUES ('0002' ,'项目二')
INSERT INTO xm VALUES ('0701' ,'项目七')
INSERT INTO xm VALUES ('0808' ,'项目八')
INSERT INTO xm VALUES ('1001' ,'项目十')

go






CREATE TABLE dbo.mm
(
year_month CHAR (6) NOT NULL,
dept_code VARCHAR (20) NOT NULL,
cost__code VARCHAR (20) NOT NULL,
amount NUMERIC (16,2) NULL
)
GO

INSERT INTO mm VALUES ('201201' ,'10101','0001','200.00')
INSERT INTO mm VALUES ('201201' ,'10102','0001','300.00')
INSERT INTO mm VALUES ('201201' ,'10102','0002','100.00')
INSERT INTO mm VALUES ('201201' ,'102','0808','200.00')
INSERT INTO mm VALUES ('201201' ,'aaaaa','0001','200.00')
INSERT INTO mm VALUES ('201202' ,'10101','0002','200.00')
INSERT INTO mm VALUES ('201202' ,'10101','0701','700.00')

GO

需求的报表按 year_month 段查询汇总显示,格式显示,以查询201201为例
dept_code (项目) 0001 0002 0701 0808 1001 。。。


101 500.00 100.00 0 0 0
10101 200.00 0 0 0 0
10102 300.00 100.00 0 0 0
102 0 0 0 200.00 0
801
80101
80103
aaaaaa 200.00 0 0 0 0
合计 700.00 100.00 200.00 0

部门、项目,均不固定,后续增加时,报表需要同步的增加上。报表里需要包含当期所有的部门和项目。

读书人网 >SQL Server

热点推荐