SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-10-09 : 10:29:29
|
[code]-- Prepare sample dataDECLARE @Source TABLE (PK INT, C2 INT, C3 INT, C4 INT, C5 INT, C6 INT, C7 INT)INSERT @SourceSELECT 1, NULL, NULL, 5, NULL, NULL, NULL UNION ALLSELECT 2, NULL, 1, 12, NULL, 6, 8 UNION ALLSELECT 3, NULL, 3, NULL, 14, NULL, NULL UNION ALLSELECT 4, NULL, NULL, NULL, 8, NULL, NULL UNION ALLSELECT 5, NULL, 6, 7, 9, 4, NULL UNION ALLSELECT 6, NULL, 7, NULL, NULL, NULL, 18 UNION ALLSELECT 7, NULL, NULL, 22, 23, NULL, 17-- Set up some stagingDECLARE @Stage TABLE (thePK INT, thePosition INT, theValue INT)INSERT @StageSELECT PK, 1, C2 FROM @Source WHERE C2 IS NOT NULL UNION ALLSELECT PK, 2, C3 FROM @Source WHERE C3 IS NOT NULL UNION ALLSELECT PK, 3, C4 FROM @Source WHERE C4 IS NOT NULL UNION ALLSELECT PK, 4, C5 FROM @Source WHERE C5 IS NOT NULL UNION ALLSELECT PK, 5, C6 FROM @Source WHERE C6 IS NOT NULL UNION ALLSELECT PK, 6, C7 FROM @Source WHERE C7 IS NOT NULL-- Reposition valuesUPDATE s1SET s1.thePosition = (SELECT COUNT(*) FROM @Stage AS s2 WHERE s2.thePK = s1.thePK AND s2.thePosition < s1.thePosition)FROM @Stage AS s1-- Show the expected outputSELECT thePK AS PK, MAX(CASE WHEN thePosition = 0 THEN theValue END) AS C2, MAX(CASE WHEN thePosition = 1 THEN theValue END) AS C3, MAX(CASE WHEN thePosition = 2 THEN theValue END) AS C4, MAX(CASE WHEN thePosition = 3 THEN theValue END) AS C5, MAX(CASE WHEN thePosition = 4 THEN theValue END) AS C6, MAX(CASE WHEN thePosition = 5 THEN theValue END) AS C7FROM @StageGROUP BY thePK[/code] E 12°55'05.25"N 56°04'39.16" |
 |
|