tbl_workers
में शामिल होने के बजाय आप इसकी अप्रकाशित विविधता में शामिल हो सकते हैं जहां position
और position2
एक ही कॉलम में होगा लेकिन अलग-अलग पंक्तियों में।
यहां बताया गया है कि अनपिवोटिंग कैसा दिख सकता है:
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
यहां पूरी क्वेरी है, जो मूल रूप से आपकी मूल क्वेरी है, जिसमें उपरोक्त क्वेरी tbl_workers
को प्रतिस्थापित करती है तालिका:
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
अपडेट करें
टिप्पणियों में अतिरिक्त अनुरोध के अनुसार यह एक संशोधित स्क्रिप्ट है:
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
विचार 4
. को प्रतिस्थापित करने का है 3
. के साथ उप-चयन में स्थिति या 2
इस पर निर्भर करते हुए कि क्या हम वर्तमान में position
pull खींच रहे हैं या position2
एकीकृत position
. के रूप में . बाहरी चयन पहले की तरह ही तर्क का उपयोग करता रहता है।