0

クエリに参加しようとしましたが、日曜日の時間で行き詰まり、

従業員が働いたすべての時間、通常の時間、残業を計算するための非常に基本的で簡単な結合クエリがあり、クエリは完全に機能しますが、日曜日の時間に参加したい場合、すべてがうまくいきません...

日曜日の時間を含まない完全なクエリ:-

SELECT
`empl_attendance`.`employee_id`,
`employee`.`employee_surname`,
`employee`.`employee_first_name`,
`employee`.`employee_second_name`,
FORMAT((IF(SUM...some basic maths...)),1) AS nt,
FORMAT((...some basic maths...),1) AS ot,
FORMAT((...some basic maths...),1) AS total
FROM
`empl_attendance`
WHERE
 (`empl_attendance_date` BETWEEN '$start_date' AND '$end_date')
INNER JOIN 
`employee` 
ON `empl_attendance`.`employee_id`=`employee`.`employee_id` 
GROUP BY `employee_id`

しかし、次のクエリを組み合わせる必要があります。これは基本的に、各従業員の日曜日の合計時間を計算します。クエリはそれ自体で正常に機能します。2 つのクエリを組み合わせるのに苦労しているだけです。

SELECT SUM(`empl_attendance_total`) AS sundays
FROM `empl_attendance`
WHERE
(`empl_attendance_date` BETWEEN '$start_date' AND '$end_date')
AND
WEEKDAY(`empl_attendance_date`) > 5
GROUP BY `employee_id`

ありがとう

ジェイ

4

1 に答える 1

0

これは、case ステートメントで行うことができます。

 SELECT  ea.`employee_id`, e.`employee_surname`,  e.`employee_first_name`,  e.`employee_second_name`,
         FORMAT((IF(SUM...some basic maths...)),1) AS nt,
         FORMAT((...some basic maths...),1) AS ot,
         FORMAT((...some basic maths...),1) AS total,
         sum(case when weekday(ea.empl_attendance_date) > 5 then ea.empl_attendance_total end) as SundayTotal
 FROM empl_attendance ea join
      employee e
      ON ea.`employee_id = e.employee_id
  WHERE  ea.empl_attendance_date BETWEEN '$start_date' AND '$end_date'
  GROUP BY `employee_id`  

FORMAT で始まる行は、日曜日以外の日付を探しているか、少なくともそれが必要な場合はそれらを含めていると想定しています。

于 2012-08-28T14:52:17.743 に答える