以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]查询表的问题。  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=114306)

--  作者:81538475
--  发布时间:2018/2/2 16:39:00
--  [求助]查询表的问题。

通过这两个表格希望使用查询表统计出每个人的当月奖金。

 

格式:

 

姓名                        总奖金

王五      =(一级产量*一级奖金+二级产量*二级奖金)

赵六

。。

。。

 

现在矛盾的地方是,一级产量和二级产量里面会涉及到同一个人。。就有点不知道怎么设置了。

 可能不是用查询表。其他统计表的方式可以怎么实现呢


图片点击可在新窗口打开查看此主题相关图片如下:1.bmp
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.bmp
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/2/2 16:40:51编辑过]

--  作者:81538475
--  发布时间:2018/2/2 17:03:00
--  

我把文件上传下

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.rar


--  作者:有点甜
--  发布时间:2018/2/2 17:18:00
--  

 

首先处理分配表,把所有负责人弄到一列去,如

 

select 一级负责人 as 姓名, \'一级\' as 等级, 当月产量 from {项目分配表} union all

select 二级负责人 as 姓名, \'二级\' as 等级, 当月产量 from {项目分配表}

 

上面语句用sql1代替。连接两个表得到数据

 

select b.姓名, iif(等级=\'一级\',一级奖金*当月产量,iif(等级=\'二级\',二级奖金*当月产量,0)) as 奖金 from {人员信息表} a inner join (sql1) b on a.姓名=b.姓名

 

上面语句用sql2代替。然后对sql2分组统计

 

select 姓名, sum(奖金) as 总奖金 from (sql2) group by 姓名

[此贴子已经被作者于2018/2/2 17:24:59编辑过]

--  作者:有点甜
--  发布时间:2018/2/2 17:26:00
--  

全部sql语句

 

select 姓名, sum(奖金) as 总奖金 from (select a.姓名, iif(等级=\'一级\',一级奖金*当月产量,iif(等级=\'二级\',二级奖金*当月产量,0)) as 奖金 from {人员信息表} a inner join (select 一级负责人 as 姓名, \'一级\' as 等级, 当月产量 from {项目分配表} union all
select 二级负责人 as 姓名, \'二级\' as 等级, 当月产量 from {项目分配表}) b on a.姓名=b.姓名) group by 姓名

 

 


--  作者:81538475
--  发布时间:2018/2/2 17:45:00
--  
多谢老大
--  作者:81538475
--  发布时间:2018/2/4 20:19:00
--  

这个如果用到外部数据的时候,需要改语法吗。为啥内部数据表没问题,外部数据的时候 提示 关键字 \'group\' 附近有语法错误。


--  作者:有点甜
--  发布时间:2018/2/4 20:23:00
--  

如果sqlserver数据库,iif要改一下,如

 

select 姓名, sum(奖金) as 总奖金 from (select a.姓名, case when 等级=\'一级\' then 一级奖金*当月产量 case when 等级=\'二级\' then 二级奖金*当月产量 else 0 end as 奖金 from {人员信息表} a inner join (select 一级负责人 as 姓名, \'一级\' as 等级, 当月产量 from {项目分配表} union all
select 二级负责人 as 姓名, \'二级\' as 等级, 当月产量 from {项目分配表}) b on a.姓名=b.姓名) as c group by 姓名


--  作者:81538475
--  发布时间:2018/2/4 20:41:00
--  
以下是引用有点甜在2018/2/4 20:23:00的发言:

如果sqlserver数据库,iif要改一下,如

 

select 姓名, sum(奖金) as 总奖金 from (select a.姓名, case when 等级=\'一级\' then 一级奖金*当月产量 case when 等级=\'二级\' then 二级奖金*当月产量 else 0 end as 奖金 from {人员信息表} a inner join (select 一级负责人 as 姓名, \'一级\' as 等级, 当月产量 from {项目分配表} union all
select 二级负责人 as 姓名, \'二级\' as 等级, 当月产量 from {项目分配表}) b on a.姓名=b.姓名) as c group by 姓名

“b”附近有语法错误。
关键字 \'case\' 附近有语法错误。

报了另外的错误


--  作者:81538475
--  发布时间:2018/2/4 20:50:00
--  

 哦好了。多了个case

select 姓名, sum(奖金) as 总奖金 from (select a.姓名, case when 等级=\'一级\' then 一级奖金*当月产量 case when 等级=\'二级\' then 二级奖金*当月产量 else 0 end as 奖金 from {人员信息表} a inner join (select 一级负责人 as 姓名, \'一级\' as 等级, 当月产量 from {项目分配表} union all
select 二级负责人 as 姓名, \'二级\' as 等级, 当月产量 from {项目分配表}) b on a.姓名=b.姓名) as c group by 姓名


--  作者:有点甜
--  发布时间:2018/2/4 23:01:00
--  

select 姓名, sum(奖金) as 总奖金 from (select a.姓名, case when 等级=\'一级\' then 一级奖金*当月产量 when 等级=\'二级\' then 二级奖金*当月产量 else 0 end as 奖金 from {人员信息表} as a inner join (select 一级负责人 as 姓名, \'一级\' as 等级, 当月产量 from {项目分配表} union all
select 二级负责人 as 姓名, \'二级\' as 等级, 当月产量 from {项目分配表}) as b on a.姓名=b.姓名) as c group by 姓名