Files
BE_IBL/sql/manual_changes/2026-04-23-fix-t-orderheader-group-result-per-test-old-pattern.sql
2026-04-23 16:24:17 +07:00

76 lines
2.9 KiB
SQL

-- Date: 2026-04-23
-- Commit message stem: fix-t-orderheader-group-result-per-test-old-pattern
-- Target: devone / one_lab
-- Problem:
-- Older rows in t_orderheader_group_result stored T_TestID into
-- T_OrderHeaderGroupResultGroup_ResultID while leaving
-- T_OrderHeaderGroupResultT_TestID = 0.
--
-- Pattern repaired here:
-- - current T_OrderHeaderGroupResultGroup_ResultID is actually a valid T_TestID
-- - current T_OrderHeaderGroupResultT_TestID = 0
-- - current T_OrderHeaderGroupResultGroup_ResultID does not exist in group_result
-- - test maps to exactly one active Group_ResultID in group_resultdetail
START TRANSACTION;
-- Preview rows that will be updated
SELECT gr.T_OrderHeaderGroupResultID,
gr.T_OrderHeaderGroupResultT_OrderHeaderID,
gr.T_OrderHeaderGroupResultGroup_ResultID AS wrong_stored_test_id,
t.T_TestName,
map.correct_group_result_id,
g2.Group_ResultName AS correct_group_name,
gr.T_OrderHeaderGroupResultGroup_ResultName AS current_name
FROM t_orderheader_group_result gr
JOIN t_test t
ON gr.T_OrderHeaderGroupResultGroup_ResultID = t.T_TestID
JOIN (
SELECT Group_ResultDetailT_TestID AS test_id,
MIN(Group_ResultDetailGroup_ResultID) AS correct_group_result_id
FROM group_resultdetail
WHERE Group_ResultDetailIsActive = 'Y'
GROUP BY Group_ResultDetailT_TestID
HAVING COUNT(DISTINCT Group_ResultDetailGroup_ResultID) = 1
) map
ON gr.T_OrderHeaderGroupResultGroup_ResultID = map.test_id
LEFT JOIN group_result g
ON gr.T_OrderHeaderGroupResultGroup_ResultID = g.Group_ResultID
LEFT JOIN group_result g2
ON map.correct_group_result_id = g2.Group_ResultID
WHERE gr.T_OrderHeaderGroupResultIsActive = 'Y'
AND IFNULL(gr.T_OrderHeaderGroupResultT_TestID, 0) = 0
AND g.Group_ResultID IS NULL
ORDER BY gr.T_OrderHeaderGroupResultID;
-- Apply repair
UPDATE t_orderheader_group_result gr
JOIN (
SELECT Group_ResultDetailT_TestID AS test_id,
MIN(Group_ResultDetailGroup_ResultID) AS correct_group_result_id
FROM group_resultdetail
WHERE Group_ResultDetailIsActive = 'Y'
GROUP BY Group_ResultDetailT_TestID
HAVING COUNT(DISTINCT Group_ResultDetailGroup_ResultID) = 1
) map
ON gr.T_OrderHeaderGroupResultGroup_ResultID = map.test_id
LEFT JOIN group_result g
ON gr.T_OrderHeaderGroupResultGroup_ResultID = g.Group_ResultID
SET gr.T_OrderHeaderGroupResultT_TestID = gr.T_OrderHeaderGroupResultGroup_ResultID,
gr.T_OrderHeaderGroupResultGroup_ResultID = map.correct_group_result_id
WHERE gr.T_OrderHeaderGroupResultIsActive = 'Y'
AND IFNULL(gr.T_OrderHeaderGroupResultT_TestID, 0) = 0
AND g.Group_ResultID IS NULL;
SELECT ROW_COUNT() AS updated_rows;
-- Verify no invalid active rows remain
SELECT COUNT(*) AS remaining_wrong_rows
FROM t_orderheader_group_result gr
LEFT JOIN group_result g
ON gr.T_OrderHeaderGroupResultGroup_ResultID = g.Group_ResultID
WHERE gr.T_OrderHeaderGroupResultIsActive = 'Y'
AND g.Group_ResultID IS NULL;
COMMIT;