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

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

先谢谢了!

...全文
545 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 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.月份


27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧