I’m working with dosimetry and receiving reports with the following fields:
WearerID BadgeType DeepDose EyeDose ExtremityDose
All wearers have a generic badge, call it BadgeType "Generic". Some wearers use secondary dosimeters just for eyes or just for deep dose that give better results and "override" their generic dosimeter. For example, if their BadgeType is "Eye," it should replace the EyeDose in the Generic badge when I report it to them. Not all wearers have this secondary badge.
I can take my results and group them by WearerID, but how do I collapse the group into reporting BadgeType Eye results for EyeDose when they exist, and Generic results when they don’t?
SELECT * FROM BadgeResults GROUP BY WearerID;
But I’ve no idea how to collapse the group into specific results based on if a BadgeType exists within that group. It’s not a Max() or Count(). It’s an IIF(BadgeType="Eye" exists in this group, use Eye row, else use Generic row).
LEFT JOIN the main BadgeResults with the "eye" one, overriding the main value with the eye one if it exists. E.g.
SELECT main.WearerID, main.DeepDose, Nz(eye.EyeDose, main.EyeDose) AS CalculatedEyeDose, main.ExtremityDose FROM (SELECT * FROM BadgeResults WHERE BadgeType = 'Generic') AS main LEFT JOIN (SELECT * FROM BadgeResults WHERE BadgeType = 'Eye') AS eye ON main.WearerID = eye.WearerID