0

作業中のクエリで複数のテーブルを結合するのに本当に問題があります。

5 つの異なるテーブルがあります。

  1. イベントの保存: eventid、staffnumber、日付、開始日と終了日..
  2. Event_overview 保存: eventid、clientid..
  3. レートの保存: clientid、rateswaiter、rateschef、ratesteamleader..
  4. スタッフ: スタッフ ID、ファーストネーム、ラストネーム..
  5. 給与:スタッフ、給与

スタッフ ID ごとにグループ化されたすべてのイベントの結果を示す 1 つのテーブルを作成したいと思います。これは、イベントごとに働いた合計時間数、1 時間あたりの役割に応じたレート、および働いた時間数、給与、給与 * を掛けたものです。時間

私は、単独で完全に機能する 2 つの異なるテーブルから始めました。

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

2 番目のクエリ

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

これらの情報を 1 つのテーブルにまとめて、スタッフ メンバーごとに乗算および合計し、上記のクエリをサブクエリとして使用できるようにしたいと考えています。

誰かが私を助けてくれることを願っています。前もって感謝します、

4

1 に答える 1

0

私はこのようなものがあなたが望むものだと思います:

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

于 2013-05-20T22:05:11.757 に答える