各位高手,弱弱的提个问题,烦请指教!

danzengnianzha 2018-03-05 11:28:28
我现在用Excel VBA+MSsql2016弄一个简单的系统,想实现图片中3个查询统计功能,但是不知道怎么写SQL查询,烦请高手指教!

先谢谢了!

...全文
474 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
二月十六 2018-03-06
回复
danzengnianzha 2018-03-06
那个分怎么给啊
回复
danzengnianzha 2018-03-06
版主,太感谢您了! 在您的启迪下,已经解决了,谢谢您!
回复
danzengnianzha 2018-03-06
对不起刚才那个有误,就是下面的这个问题了! 版主,首先特别感谢您的关心! 我看了一下SQL执行结果,比如左后一个结果,在表c里A单位根本就没有“个人扣款”金额;A单位2018年“工资总额”远远不止6001。 烦请您指教!
回复
二月十六 2018-03-06
引用 5 楼 danwaer20 的回复:
版主,首先特别感谢您的关心! 我看了一下SQL执行结果,比如左后一个结果,在表c里A单位根本就没有“个人扣款”金额;A单位2018年“工资总额”远远不止6001。 烦请您指教! 另外,在mssql2016里提示如图:
上边那个是测试数据,不是和楼主数据一样的,但是写法是一样,如果要完全一样 建议楼主列出表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
回复
danzengnianzha 2018-03-06
版主,首先特别感谢您的关心! 我看了一下SQL执行结果,比如左后一个结果,在表c里A单位根本就没有“个人扣款”金额;A单位2018年“工资总额”远远不止6001。 烦请您指教! 另外,在mssql2016里提示如图:
回复
danzengnianzha 2018-03-05
首先,感谢大家了!
回复
二月十六 2018-03-05
SELECT  #a.所属单位 ,
#a.年份 ,
SUM(ISNULL(#a.工资, 0)) AS 工资总额 ,
SUM(ISNULL(#b.福利, 0)) AS 福利总额 ,
SUM(ISNULL(#c.扣款金额, 0)) AS 个人扣款总额 ,
SUM(ISNULL(#d.扣款金额, 0)) AS 单位扣款总额 ,
SUM(ISNULL(#a.工资, 0)) + SUM(ISNULL(#b.福利, 0)) + SUM(ISNULL(#c.扣款金额, 0))
+ SUM(ISNULL(#d.扣款金额, 0)) AS 总计,
STUFF(( SELECT ',' + 扣款原因
FROM #d
WHERE 所属单位 = #a.所属单位
AND 年份 = #a.年份
FOR
XML PATH('')
), 1, 1, '') AS 扣款原因
FROM #a
LEFT JOIN #b ON #b.年份 = #a.年份
AND #b.月份 = #a.月份
AND #b.所属单位 = #a.所属单位
LEFT JOIN #c ON #c.年份 = #a.年份
AND #c.月份 = #a.月份
AND #c.所属单位 = #a.所属单位
LEFT JOIN #d ON #d.年份 = #a.年份
AND #d.月份 = #a.月份
AND #d.所属单位 = #a.所属单位
GROUP BY #a.所属单位 ,
#a.年份


回复
二月十六 2018-03-05
1#的有点问题:
--测试数据
if not object_id(N'Tempdb..#a') is null
drop table #a
Go
Create table #a([员工编号] nvarchar(27),[所属单位] nvarchar(21),[年份] nvarchar(21),[月份] int,[工资] int)
Insert #a
select N'BH12345',N'A','2018',1,'3000' union all
select N'BH12345',N'A','2018',2,'3001' union all
select N'BH12346',N'B','2018',1,'3000'
GO
if not object_id(N'Tempdb..#b') is null
drop table #b
Go
Create table #b([员工编号] nvarchar(27),[所属单位] nvarchar(21),[年份] nvarchar(21),[月份] int,[福利] int)
Insert #b
select N'BH12345',N'A','2018',1,1000 union all
select N'BH12345',N'A','2018',2,1001 union all
select N'BH12346',N'B','2018',1,890
GO
if not object_id(N'Tempdb..#c') is null
drop table #c
Go
Create table #c([员工编号] nvarchar(27),[所属单位] nvarchar(21),[年份] nvarchar(21),[月份] int,[扣款金额] int,[扣款原因] nvarchar(22))
Insert #c
select N'BH12345',N'A','2018',1,1000,N'房租' union all
select N'BH12345',N'A','2018',2,1001,N'房租' union all
select N'BH12346',N'B','2018',1,890,N'房租'
GO
if not object_id(N'Tempdb..#d') is null
drop table #d
Go
Create table #d([所属单位] nvarchar(21),[年份] nvarchar(21),[月份] int,[扣款金额] int,[扣款原因] nvarchar(22))
Insert #d
select N'A','2018',1,1000,N'房租' union all
select N'A','2018',2,1001,N'房租' union all
select N'B','2018',1,890,N'房租'
Go
--测试数据结束
SELECT #a.所属单位 ,
#a.年份 ,
#a.月份 ,
SUM(ISNULL(#a.工资, 0)) AS 工资总额 ,
SUM(ISNULL(#b.福利, 0)) AS 福利总额 ,
SUM(ISNULL(#c.扣款金额, 0)) AS 个人扣款总额 ,
SUM(ISNULL(#d.扣款金额, 0)) AS 单位扣款总额 ,
SUM(ISNULL(#a.工资, 0)) + SUM(ISNULL(#b.福利, 0)) + SUM(ISNULL(#c.扣款金额, 0))
+ SUM(ISNULL(#d.扣款金额, 0)) AS 总计
FROM #a
LEFT JOIN #b ON #b.年份 = #a.年份
AND #b.月份 = #a.月份
AND #b.所属单位 = #a.所属单位
LEFT JOIN #c ON #c.年份 = #a.年份
AND #c.月份 = #a.月份
AND #c.所属单位 = #a.所属单位
LEFT JOIN #d ON #d.年份 = #a.年份
AND #d.月份 = #a.月份
AND #d.所属单位 = #a.所属单位
WHERE #a.月份 = 1
GROUP BY #a.所属单位 ,
#a.年份 ,
#a.月份







回复
二月十六 2018-03-05
--测试数据
if not object_id(N'Tempdb..#a') is null
drop table #a
Go
Create table #a([员工编号] nvarchar(27),[所属单位] nvarchar(21),[年份] nvarchar(21),[月份] int,[工资] int)
Insert #a
select N'BH12345',N'A','2018',1,'3000' union all
select N'BH12345',N'A','2018',2,'3001' union all
select N'BH12346',N'B','2018',1,'3000'
GO
if not object_id(N'Tempdb..#b') is null
drop table #b
Go
Create table #b([员工编号] nvarchar(27),[所属单位] nvarchar(21),[年份] nvarchar(21),[月份] int,[福利] int)
Insert #b
select N'BH12345',N'A','2018',1,1000 union all
select N'BH12345',N'A','2018',2,1001 union all
select N'BH12346',N'B','2018',1,890
GO
if not object_id(N'Tempdb..#c') is null
drop table #c
Go
Create table #c([员工编号] nvarchar(27),[所属单位] nvarchar(21),[年份] nvarchar(21),[月份] int,[扣款金额] int,[扣款原因] nvarchar(22))
Insert #c
select N'BH12345',N'A','2018',1,1000,N'房租' union all
select N'BH12345',N'A','2018',2,1001,N'房租' union all
select N'BH12346',N'B','2018',1,890,N'房租'
GO
if not object_id(N'Tempdb..#d') is null
drop table #d
Go
Create table #d([所属单位] nvarchar(21),[年份] nvarchar(21),[月份] int,[扣款金额] int,[扣款原因] nvarchar(22))
Insert #d
select N'A','2018',1,1000,N'房租' union all
select N'A','2018',2,1001,N'房租' union all
select N'B','2018',1,890,N'房租'
Go
--测试数据结束
SELECT #a.所属单位 ,
#a.年份 ,
#a.月份 ,
SUM(ISNULL(#a.工资, 0)) AS 工资总额 ,
SUM(ISNULL(#b.福利, 0)) AS 福利总额 ,
SUM(ISNULL(#c.扣款金额, 0)) AS 个人扣款总额 ,
SUM(ISNULL(#d.扣款金额, 0)) AS 单位扣款总额
FROM #a
LEFT JOIN #b ON #b.年份 = #a.年份
AND #b.月份 = #a.月份
LEFT JOIN #c ON #c.年份 = #a.年份
AND #c.月份 = #b.月份
LEFT JOIN #d ON #d.年份 = #a.年份
AND #d.月份 = #a.月份
WHERE #a.月份=1
GROUP BY #a.所属单位 ,
#a.年份 ,
#a.月份


回复
相关推荐
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2018-03-05 11:28
社区公告
暂无公告