Sorry to bother you again. I need to check if the field1= '1' and replace it if it is .
this does but then it puts the 1 in the field 4 ?
thanks so much
;WITH shiftedFields
AS
(
SELECT t.id
,MAX(CASE WHEN f=1 THEN v ELSE NULL END) Field1
,MAX(CASE WHEN f=2 THEN v ELSE NULL END) Field2
,MAX(CASE WHEN f=3 THEN v ELSE NULL END) Field3
,MAX(CASE WHEN f=4 THEN v ELSE NULL END) Field4
FROM thedatalookslikethis t
CROSS APPLY (SELECT TOP 4 ROW_NUMBER() OVER (ORDER BY (CASE WHEN v IS NULL or v = '1' THEN 5 ELSE f END)) f, v
FROM (VALUES (1,field1),(2,field2),(3,field3),(4,field4)) nn(f,v)
ORDER BY (CASE WHEN v IS NULL or v = '1' THEN 5 ELSE f END)) c
GROUP BY t.id
)
UPDATE t
SET Field1 = sf.Field1
,Field2 = sf.Field2
,Field3 = sf.Field3
,Field4 = sf.Field4
FROM thedatalookslikethis t
JOIN shiftedFields sf ON sf.id = t.id