【问题标题】:Joining multiple issue加入多个问题
【发布时间】:2013-05-20 21:24:47
【问题描述】:

我在一个工作查询中加入多个表时确实遇到了麻烦。

有 5 个不同的表:

  1. 事件存储:eventid、staffnumber、日期、开始和结束日期..
  2. Event_overview 存储:eventid、clientid..
  3. 费率存储:clientid、rateswaiter、rateschef、ratesteamleader..
  4. 员工:员工编号、名字、姓氏..
  5. 薪水:员工,薪水

我想创建一个表格,为我提供按人员 ID 分组的所有事件的结果,表明他们在每个事件中工作的总小时数、根据他们每小时角色的费率乘以他们工作的小时数、薪水, 工资*小时

我从两张不同的桌子开始,它们各自完美地工作。

Select event.staffid, staff.firstname,   
staff.lastname, salary.wage, evento.clientid,
event.date, TIMEDIFF( hours, pause ) AS Total, event.role
from event
inner join evento on event.eventid=evento.eventid
inner join salary on event.staffid=salary.staffid
inner join staff on event.staffid=staff.staffid

第二个查询

SELECT event.clientid
FROM evento
JOIN rates ON evento.clientid = rates.clientid
group by evento.clientid

稍后我需要根据员工的角色来决定选择哪个费率

   CASE WHEN Position = 'Teamleader'
   THEN (Teamleader)
   WHEN Position = 'waiter'
    THEN (waiter)
   WHEN Position = 'chef'
       THEN (chef)
  ELSE '0'
  END AS revenue

我想将这些信息放在一个表中,这样我就可以开始对每个员工进行多重和汇总,并将上述查询用作子查询。

希望有人可以帮助我。 提前谢谢,

【问题讨论】:

  • 你有什么问题?我看到的唯一错误是您应该使用rateTeamleaderrateWaiterrateChef。如果您有一个将职位名称与费率相关联的表格,那么您将更具可扩展性,然后您可以在职位上加入此表格,而不是使用 CASE 语句。
  • 那么我如何加入这两个表?通过交叉连接?
  • 哪两张表?这些是查询,而不是表。如果需要,您可以将它们作为子查询加入。或者您可以使用 CASE 语句作为表达式的一部分,在加入后乘以小时数。
  • 不清楚你想要什么作为最终结果。发布一些示例数据和所需的结果。
  • 抱歉,当然是查询。但正如您在我的评论中看到的那样,有两个选择查询,我想加入。我使用 where 子句 where eventto.clientid in (SELECT event.clientid....但是当我插入 case 语句时 mysql 不知道列 rateTeamleader 等。

标签: mysql


【解决方案1】:

我认为你想要这样的东西:

Select event.staffid, staff.firstname,   
       staff.lastname, salary.wage, evento.clientid,
       event.date, TIMEDIFF( hours, pause ) AS Total, event.role,
       TIMEDIFF(hours, pause) *
         case position 
              when 'Teamleader' then rateteamleader
              when 'waiter' then ratewaiter
              when 'chef' then ratechef
         end TotalSalary 
from event
inner join evento on event.eventid=evento.eventid
inner join salary on event.staffid=salary.staffid
inner join staff on event.staffid=staff.staffid
inner join rates on evento.clientid = rates.clientid

如果您对rates 表进行标准化处理会更好,其中包含以下列:clientidpositionrate。那么连接将是:

inner join rates on evento.clientid = rates.clientid and staff.position = rates.position

您只需执行TIMEDIFF(house, pause) * rate 即可获得TotalSalary

【讨论】:

  • 我对费率表进行了标准化,然后采纳了您对查询的建议。谢谢你,这真的是一个很大的帮助,我很高兴我能够解决这个问题。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 2020-12-08
  • 1970-01-01
相关资源
最近更新 更多