Ich habe zwei MYSQL
Tabellen. Diese heißen wie folgt: attendance_summary
, attendance_summary_cecb
. Beide Tabellen haben die gleichen Felder, können jedoch unterschiedliche Daten enthalten.Wie kann ich diese SELECT-Abfrage in MySQL erstellen?
Dies sind die Ergebnisse der Monat August 2016 von diesen beiden Tabellen.
mysql> SELECT emp_id, date, days, ot_days, ot_hours FROM attendance_summary;
+--------+------------+------+---------+----------+
| emp_id | date | days | ot_days | ot_hours |
+--------+------------+------+---------+----------+
| 4 | 2016-08-01 | 10 | 0 | 20.0 |
| 4 | 2016-08-16 | 13 | 0 | 14.5 |
| 12 | 2016-08-01 | 12 | 0 | 10.0 |
| 12 | 2016-08-16 | 11 | 2 | 16.5 |
| 14 | 2016-08-01 | 12 | 2 | 15.0 |
| 14 | 2016-08-16 | 10 | 0 | 16.0 |
| 15 | 2016-08-01 | 11 | 0 | 16.0 |
| 15 | 2016-08-16 | 9 | 3 | 21.0 |
+--------+------------+------+---------+----------+
8 rows in set (0.00 sec)
mysql> SELECT emp_id, date, days, ot_days, ot_hours FROM attendance_summary_cecb;
+--------+------------+------+---------+----------+
| emp_id | date | days | ot_days | ot_hours |
+--------+------------+------+---------+----------+
| 4 | 2016-08-01 | 15 | 0 | 20.0 |
| 4 | 2016-08-16 | 10 | 0 | 12.0 |
| 12 | 2016-08-01 | 12 | 1 | 10.0 |
| 12 | 2016-08-16 | 11 | 2 | 16.5 |
| 14 | 2016-08-01 | 12 | 2 | 15.0 |
| 14 | 2016-08-16 | 10 | 0 | 16.0 |
| 15 | 2016-08-01 | 10 | 0 | 16.0 |
| 15 | 2016-08-16 | 9 | 0 | 21.0 |
+--------+------------+------+---------+----------+
8 rows in set (0.00 sec)
Mit Hilfe dieser beiden Tabellen in einer einzigen Abfrage, ich brauche
> From `attendance_summary`
> - Total Days
> - Total OT Days
> - Total OT Hours
>
> From `attendance_summary_cecb`
> - Total Days
> - Total OT Days
> - Total OT Hours
Dies ist zu bekommen, wie ich es versucht:
SELECT e.emp_id
, e.full_name
, MAX(days1) as days1
, MAX(ot_days1) as ot_days1
, MAX(ot_hours1) as ot_hours1
, MAX(days2) as days2
, MAX(ot_days2) as ot_days2
, MAX(ot_hours2) as ot_hours2
, SUM(days1+days2) AS olekma_days
, SUM(ot_days1+ot_days2) AS olekma_ot_days
, SUM(ot_hours1+ot_hours2) AS olekma_ot_hours
, SUM(days3+days4) AS cecb_days
, SUM(ot_days3+ot_days4) AS cecb_ot_days
, SUM(ot_hours3+ot_hours4) AS cecb_ot_hours
FROM
(
SELECT emp_id
, CASE DAY(date) WHEN 1 THEN days ELSE 0 END as days1
, CASE DAY(date) WHEN 1 THEN ot_days ELSE 0 END as ot_days1
, CASE DAY(date) WHEN 1 THEN ot_hours ELSE 0 END as ot_hours1
, CASE DAY(date) WHEN 16 THEN days ELSE 0 END as days2
, CASE DAY(date) WHEN 16 THEN ot_days ELSE 0 END as ot_days2
, CASE DAY(date) WHEN 16 THEN ot_hours ELSE 0 END as ot_hours2
FROM attendance_summary
WHERE MONTH(date) = 08 AND YEAR(date) = 2016
UNION
SELECT emp_id
, CASE DAY(date) WHEN 1 THEN days ELSE 0 END as days3
, CASE DAY(date) WHEN 1 THEN ot_days ELSE 0 END as ot_days3
, CASE DAY(date) WHEN 1 THEN ot_hours ELSE 0 END as ot_hours3
, CASE DAY(date) WHEN 16 THEN days ELSE 0 END as days4
, CASE DAY(date) WHEN 16 THEN ot_days ELSE 0 END as ot_days4
, CASE DAY(date) WHEN 16 THEN ot_hours ELSE 0 END as ot_hours4
FROM attendance_summary_cecb
WHERE MONTH(date) = 08 AND YEAR(date) = 2016
) as s
LEFT JOIN employees e USING (emp_id)
INNER JOIN categories c ON c.id = e.category_id AND c.salary_type = 'D'
WHERE e.category_id = 6
GROUP BY e.emp_id\G
UPDATE: Dies ist Tabellenstruktur für diese zwei Tabellen:
CREATE TABLE `attendance_summary` (
`as_id` INT(11) NOT NULL AUTO_INCREMENT,
`emp_id` INT(11) NOT NULL,
`date` DATE NOT NULL DEFAULT '1901-01-01',
`days` INT(11) NOT NULL,
`ot_days` INT(11) NULL,
`ot_hours` DECIMAL(16,1) NULL,
PRIMARY KEY (`as_id`),
UNIQUE KEY (emp_id, `date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `attendance_summary_cecb` (
`as_id` INT(11) NOT NULL AUTO_INCREMENT,
`emp_id` INT(11) NOT NULL,
`date` DATE NOT NULL DEFAULT '1901-01-01',
`days` INT(11) NOT NULL,
`ot_days` INT(11) NULL,
`ot_hours` DECIMAL(16,1) NULL,
PRIMARY KEY (`as_id`),
UNIQUE KEY (emp_id, `date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Aber es funktioniert nicht für mich. Hoffe jemand kann mir helfen.
Und wollen Sie uns erraten, was schief gegangen ist oder gehen Sie um es mit uns zu teilen? – Shadow
@Shadow, ich habe einen Fehler wie 'ERROR 1054 (42S22): Unbekannte Spalte 'Tage3' in 'Feldliste'' – user3733831
weil Sie einen Tippfehler in der zweiten Hälfte der Union – Drew