I would like to convert unknown number of rows into one columns as thus:
My table....
EMPLOYEENO NAMES CODE AMOUNT
105 NAHYA ODA BASESAL 234000
105 NAHYA ODA 249 35000
105 NAHYA ODA 250 37000
100 MAURICE RICH 249 23000
100 MAURICE RICH 250 21000
100 MAURICE RICH BASESAL 295000
107 TRINAH MYJOY 332 15000
107 TRINAH MYJOY 249 12400
107 TRINAH MYJOY LUNCHALLOW 66000
107 TRINAH MYJOY BASESAL 245000
107 TRINAH MYJOY 133 56100
107 TRINAH MYJOY 124 27400
convert into this....
EMPLOYEENO NAMES OTHERDEDUCT
105 NAHYA ODA 249-35000,250-37000
100 MAURICE RICH 249-23000,250-21000
107 TRINAH MYJOY 332-15000,249-12400,133-56100,124-27400
The new column "OTHERDEDUCT" should only include CODES which are numeric and exclude 'basesal & lunchallow'
Kindly see my code below, am stuck at the point of trying to merge code & amount into a string.
Your help is much appreciated.
DECLARE @r VARCHAR(MAX), @n INT, @i INT
SELECT @i = 1,
@r = 'SELECT EmployeeNo, Names, ' + CHAR(13),
@n = (SELECT TOP 1 COUNT( Code )
FROM [platinum].[dbo].[oda]
GROUP BY EmployeeNo, NAMES
ORDER BY COUNT( Code ) DESC ) ;
WHILE @i <= @n BEGIN
SET @r = @r +
CASE WHEN @i = 1
THEN 'MAX( CASE Seq WHEN ' + CAST( @i AS VARCHAR ) + '
THEN Code
ELSE SPACE(0) END ) + ' + CHAR(13)
WHEN @i = @n
THEN 'MAX( CASE Seq WHEN ' + CAST( @i AS VARCHAR ) + '
THEN '', '' + Code
ELSE SPACE(0) END ) ' + CHAR(13)
ELSE 'MAX( CASE Seq WHEN ' + CAST( @i AS VARCHAR ) + '
THEN '', '' + Code
ELSE SPACE(0) END ) + ' + CHAR(13)
END ;
SET @i = @i + 1 ;
END
SET @r = @r + '
FROM ( SELECT EmployeeNo, Names, Code,
ROW_NUMBER() OVER ( PARTITION BY EmployeeNo ORDER BY Code )
FROM [platinum].[dbo].[oda] p ) D ( EmployeeNo, Names, Code, Seq )
GROUP BY EmployeeNo, NAMES;'
EXEC( @r ) ;