ocean3300 (10/25/2016)
Is there a way to write a single query to update all values? or any other ways to make it perform better?
1. Normalise your data.
Here I do normalisation on-fly, but you better implement it in the table design:
SELECT ID, 1, Value1, Value1_Pct
FROM #DataTableName
UNION
SELECT ID, 2, Value2, Value2_Pct
FROM #DataTableName
UNION
SELECT ID, 3, Value3, Value3_Pct
FROM #DataTableName
UNION
SELECT ID, 4, Value4, Value4_Pct
FROM #DataTableName
2. Get rid of UPDATE altogether.
Storing CheckNAme in the base table won't add much, as indexing would be ineffective, and I suspect you have those values updated quite often, so you need to refresh those checks quite regularly.
Make it into a view, or use as a derived table (aka CTE) in your queries:
SELECT T.ID, T.ValueID, T.Value, T.Value_PCT, J.CheckName
FROM (
SELECT ID, 1, Value1, Value1_Pct
FROM #DataTableName
UNION
SELECT ID, 2, Value2, Value2_Pct
FROM #DataTableName
UNION
SELECT ID, 3, Value3, Value3_Pct
FROM #DataTableName
UNION
SELECT ID, 4, Value4, Value4_Pct
FROM #DataTableName
) T (ID, ValueID, Value, Value_PCT)
LEFT JOIN #Join J ON (Value_Pct >= J.Low OR J.Low IS NULL)
AND (Value_Pct <= J.High OR J.High IS NULL)
As you can see, data normalisation reduces the amount of necessary code by 4 times.
Comes quite useful at times. 🙂
_____________
Code for TallyGenerator