Alih-alih bergabung ke tbl_workers
Anda dapat bergabung dengan variasi yang tidak dipilih di mana position
dan position2
akan berada di kolom yang sama tetapi di baris yang berbeda.
Berikut adalah tampilan unpivoting:
SELECT
w.id,
w.name,
CASE x.pos WHEN 1 THEN w.position ELSE w.position2 END AS position,
w.status
FROM tbl_workers AS w
CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x
Inilah keseluruhan kueri, yang pada dasarnya adalah kueri asli Anda dengan kueri di atas yang menggantikan tbl_workers
tabel:
SELECT p.id,
p.position,
SUM(CASE w.Status WHEN 2 THEN 1 ELSE 0 END) AS booked,
SUM(CASE w.Status WHEN 3 THEN 1 ELSE 0 END) AS placed
FROM tbl_positions AS p
LEFT JOIN (
SELECT
w.id,
w.name,
CASE x.pos WHEN 1 THEN w.position ELSE w.position2 END AS position,
w.status
FROM tbl_workers AS w
CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x
) AS w
ON w.position=p.id
GROUP BY p.id, p.position
PERBARUI
Ini adalah skrip yang dimodifikasi sesuai dengan permintaan tambahan di komentar:
SELECT p.id,
p.position,
SUM(CASE w.Status WHEN 2 THEN 1 ELSE 0 END) AS booked,
SUM(CASE w.Status WHEN 3 THEN 1 ELSE 0 END) AS placed
FROM tbl_positions AS p
LEFT JOIN (
SELECT
w.id,
w.name,
CASE x.pos WHEN 1 THEN w.position ELSE w.position2 END AS position,
CASE w.status
WHEN 4 THEN CASE x.pos WHEN 1 THEN 3 ELSE 2 END
ELSE w.status
END AS status
FROM tbl_workers AS w
CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x
) AS w
ON w.position=p.id
GROUP BY p.id, p.position
Idenya adalah untuk menggantikan 4
status di subpilih dengan 3
atau 2
tergantung pada apakah kita sedang menarik position
atau position2
sebagai position
terpadu . Pilihan luar tetap menggunakan logika yang sama seperti sebelumnya.