I've a table for sample name that contains the following columns firmnesssID
, SampleTestingID
and Firmness
:
Now, I need to display output like the image below. Iām assuming there are maximum 40 records for a particular SampleTestingID
and I want to show Firmness
values under column header like 1a 1b 2a 2b 3a 3b ... 20a 20b
(40 columns) for every distinct SampleTestingID
.
I also tried to achieve the same by PIVOT the data but I was unable to get desired output. Here is what I was doing:
SELECT P.SampleTestingId, IsNull(P.[1], 0) as Wk1, IsNull(P.[2], 0) as Wk2
, IsNull(P.[3], 0) as Wk3, IsNull(P.[4], 0) as Wk4
, IsNull(P.[5], 0) as Wk5, IsNull(P.[6], 0) as Wk6
, IsNull(P.[7], 0) as Wk7, IsNull(P.[8], 0) as Wk8
, IsNull(P.[9], 0) as Wk9
FROM
(
SELECT SampleTestingId, Firmness,[FirmnessID]
FROM dbo.ftatestdata WHERE SampletestingId=243 AND Isdeleted=0
) I
PIVOT
(
SUM([FirmnessID])
FOR [Firmness] IN ([1], [2], [3], [4], [5], [6], [7], [8], [9])
) as P
and
DECLARE @cols NVARCHAR (MAX)
SELECT @cols = COALESCE (@cols + ', [' + Convert(varchar, FirmnessID) + ']', '[' + Convert(varchar, FirmnessID) + ']')
FROM FtaTestData
WHERE SampleTestingID=243 AND IsDeleted=0 order by SampleTestingID
print @cols
DECLARE @Query VARCHAR(MAX)
SET @Query= 'SELECT '+ @cols +' FROM (SELECT FirmnessID, Firmness
FROM FtaTestData WHERE SampleTestingID=243 AND IsDeleted=0) P PIVOT ( MAX(Firmness) FOR FirmnessID IN ( '+@cols+' ) ) AS pvt'
print @Query
EXEC(@Query)