--===== If the test table already exists, drop it IF OBJECT_ID('TempDB..#LabValues','U') IS NOT NULL DROP TABLE #LabValues--===== Create the test table with CREATE TABLE #LabValues ( UserID int, LabName varchar(150), ResultValue Float, )
SELECT 23456789, 'White Blood Cell Count', 4.5 UNION ALLSELECT 23456789, 'Red Blood Cell Count', 3.16 UNION ALLSELECT 23456789, 'Hemoglobin', 11.2 UNION ALLSELECT 23456789, 'Hematocrit', 32.1 UNION ALLSELECT 23456789, 'Mean Corpuscular Volume', 101.6 UNION ALLSELECT 23456789, 'Mean Corpuscular Hgb', 35.4 UNION ALLSELECT 23456789, 'Mean Corpuscular Hgb' Conc, 34.9 UNION ALLSELECT 23456789, 'Red Cell Distribution SD', 59.7 UNION ALLSELECT 23456789, 'Red Cell Distribution CV', 16.1 UNION ALLSELECT 23456789, 'Mean Platelet Volume', 9.3 UNION ALLSELECT 23456789, 'Absolute Segmented Neutrophil', 3.51 UNION ALLSELECT 23456789, 'Absolute Monocytes', 0.41 UNION ALLSELECT 23456789, 'Absolute Eosinophil', 0.14 UNION ALLSELECT 23456789, 'Absolute Basophil', 3.48 UNION ALLSELECT 23456789, 'Absolute Neutrophil Count', 3.51 UNION ALLSELECT 23456789, 'Manual Differential', 4.55 UNION ALLSELECT 23456789, 'Anisocytosis', 2.34 UNION ALLSELECT 23456789, 'Macrocytes', 1.17 UNION ALLSELECT 23456789, 'Potassium Blood', 3.9 UNION ALLSELECT 23456789, 'Creatinine', 0.6 UNION ALLSELECT 23456789, 'Calcium Blood Level', 8.3 UNION ALLSELECT 23456789, 'Total Protein Blood', 6.0 UNION ALLSELECT 23456789, 'Bilirubin Total', 0.6 UNION ALLSELECT 23456789, 'White Blood Cell Count', 3.1
SELECT UserID ,[White Blood Cell Count]=MAX(CASE LabName WHEN 'White Blood Cell Count' THEN ResultValue END) ,[Red Blood Cell Count]=MAX(CASE LabName WHEN 'Red Blood Cell Count' THEN ResultValue END) ,[Hemoglobin]=MAX(CASE LabName WHEN 'Hemoglobin' THEN ResultValue END)FROM #LabValuesGROUP BY UserID
Declare @sql Nvarchar(MAX) ;With CTE As ( Select Distinct LabName From #LabValues ) Select @sql = STUFF((Select ',MAX(Case When LabName = ' + CHAR(39) + LabName + CHAR(39) + ' Then ResultValue Else '''' End) AS ' + CHAR(39) + LabName + CHAR(39) From CTE For XML Path('')),1,1,'') Select @sql = 'Select UserId, ' + @sql + ' From #LabValues Group By UserId' Execute (@sql)
IF OBJECT_ID('tempdb..#LabValues') IS NOT NULLDROP TABLE #LabValuesSELECT * INTO #LabValues FROM (VALUES (1,'A',5),(1,'B',6),(1,'C',7),(2,'D',8),(2,'E',9),(2,'F',4))x(UserID,LabName,ResultValue)Declare @sql Nvarchar(MAX) ;With CTE As ( Select Distinct LabName From #LabValues ) Select @sql = STUFF((Select ',MAX(Case When LabName = ' + CHAR(39) + LabName + CHAR(39) + ' Then CAST(ResultValue AS VARCHAR) Else '''' End) AS ' + CHAR(39) + LabName + CHAR(39) From CTE For XML Path('')),1,1,'') Select @sql = 'Select UserId, ' + @sql + ' From #LabValues Group By UserId' Execute (@sql)