76 lines
2.9 KiB
SQL
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;
|