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.