Thay vì tham gia vào tbl_workers bạn có thể tham gia vào biến thể không được phân chia của nó ở vị trí position và position2 sẽ ở trong cùng một cột nhưng ở các hàng khác nhau.
Đây là cách việc bỏ chia sẻ có thể trông như thế nào:
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
Đây là toàn bộ truy vấn, về cơ bản là truy vấn ban đầu của bạn với truy vấn ở trên thay thế cho tbl_workers bảng:
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
CẬP NHẬT
Đây là một tập lệnh được sửa đổi theo yêu cầu bổ sung trong nhận xét:
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
Ý tưởng là thay thế 4 trạng thái trong lựa chọn con với 3 hoặc 2 tùy thuộc vào việc chúng tôi hiện đang kéo position hoặc position2 là position hợp nhất . Lựa chọn bên ngoài tiếp tục sử dụng logic giống như trước đây.