0

I'm having a very tough time trying to figure out how to do

CID  sUSER  VALUE
------------------
001  235      10
001  188      20
001   04      5
002  235      11
002  188      12
002   04      13

I would like it displayed as follows

CID  04   188  235
-------------------
001  5     20   10
002  13    12   11

Can someone please show me the Sql code please ?

Gecew
  • 21
  • 1
  • 1
  • 2

2 Answers2

0

Lets Assume you have filtered data in #tmpCID; now try below script

Declare @sUser As Varchar(Max)
SELECT @sUser= Case isNull(@sUser,'')
        When '' then '['+ Rtrim(sUser) + ']'
        Else  COALESCE(@sUser + ',[', ',') +  Rtrim(sUser)+ ']'
        End
         FROM (SELECT DISTINCT sUser FROM #tmpCID) U


Declare @Query As Varchar(Max)
Set @Query='Select CID, ' + @sUser + ' From #tmpCID
    Pivot (AVG(Value)
    For sUser IN     ('+ @sUser + ')) As P'

EXEC  (@Query)
Naveen Kumar
  • 1,541
  • 10
  • 12
0

Try this:

CREATE PROCEDURE YourProcedureName
as
Begin 

DECLARE @sUSER AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);

select @sUSER = STUFF((SELECT distinct ',' + QUOTENAME(sUSER) FROM testPIVOT
                      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '');


SELECT @query = 'WITH PivotData AS
(
   SELECT CID, sUSER, VALUE
   FROM dbo.YourTableName
)

SELECT CID, '+ @sUSER +'
FROM PivotData
PIVOT(max(VALUE) FOR sUSER IN('+ @sUSER +')) AS P;';

execute(@query);

End

Hope it could help you!

Thanks.

immayankmodi
  • 8,210
  • 9
  • 38
  • 55