if there is a 1 in field1 i need to treat it as though its a null so i tried this but no luck. can you see what i am missing please.thanks
declare @thedatalookslikethis table (id int, field1 varchar(10), field2 varchar(10), field3 varchar(10), field4 varchar(10))
insert @thedatalookslikethis
select 1, 'a', null, 'b', null
union select 2, null, '9', null, '6'
union select 3, '2', null, null, '8'
union select 4, 'a', null, null, null
union select 5, '1', 'a', null, null
union select 6, null, null, 'a', null
union select 7, null, null, null, 'a'
union select 8, null, null, 'a', 'b'
union select 9, 'a', null, 'b', 'c'
union select 10, 'a', 'b', null, 'c'
union select 11, null, 'a', 'b', 'c'
;WITH shiftedFields
AS
(
SELECT
t.id,
COALESCE(t.field1, t.field2, t.field3, t.field4) AS field1_new,
CASE WHEN (ISNULL(t.field1, '1') != '1') THEN COALESCE(t.field2, t.field3, t.field4)
WHEN t.field2 IS NOT NULL THEN COALESCE(t.field3, t.field4)
WHEN t.field3 IS NOT NULL THEN t.field4
ELSE NULL END AS field2_new,
CASE WHEN ((ISNULL(t.field1, '1') != '1') AND t.field2 IS NOT NULL) THEN COALESCE(t.field3, t.field4)
WHEN ((ISNULL(t.field1, '1') != '1') AND (t.field3 IS NOT NULL OR
t.field2 IS NOT NULL AND t.field3 IS NOT NULL)) THEN t.field4
ELSE NULL END AS field3_new,
CASE WHEN (ISNULL(t.field1, '1') != '1') AND (t.field2 IS NOT NULL AND t.field3 IS NOT NULL) THEN t.field4
ELSE NULL END AS field4_new
FROM @thedatalookslikethis t
)
UPDATE t
SET Field1 = sf.field1_new
,Field2 = sf.Field2_new
,Field3 = sf.Field3_new
,Field4 = sf.Field4_new
FROM @thedatalookslikethis t
JOIN shiftedFields sf ON sf.id = t.id
SELECT * FROM @thedatalookslikethis