Hi WebRelations,
A dynamic way for your reference.
create table #temp(ID bigint, Description varchar(50), ET varchar(200), ET_Status varchar(50), ET_Date datetime, ET_IsValid varchar(3))
insert into #temp
select * from
(values (1,'Test','A', 'Ack','08/15/2015', 'Yes'),
(1,'Test','B', 'Nack','08/17/2015', 'NO'),
(1,'Test','C', 'Ack','08/21/2015', 'Yes'),
(2,'Test','C', 'Ack','08/21/2015', 'Yes'),
(2,'Test2','C', 'Ack','08/21/2015', 'Yes')
)
a(ID, Description, ET, ET_Status, ET_Date, ET_IsValid)
DECLARE @SQL NVARCHAR(MAX);
SET @SQL ='SELECT
ID,[Description]';
DECLARE @maxPortion NVARCHAR(MAX);
SELECT @maxPortion=(SELECT
','+'MAX('+ET+') AS ET_'+ET+'_Status,MAX(CASE WHEN '+ET+' IS NOT NULL THEN ET_Date END) ET_'+ET+'_Date,MAX(CASE WHEN '+ET+' IS NOT NULL THEN ET_IsValid END) ET_'+ET+'_IsValid'
FROM (SELECT DISTINCT ET FROM #temp) T ORDER BY ET FOR XML PATH(''))
--SELECT @maxPortion
DECLARE @pvtCol NVARCHAR(MAX)
SELECT @pvtCol=(
SELECT STUFF((SELECT ','+ET FROM (SELECT DISTINCT ET FROM #temp) T ORDER BY ET FOR XML PATH('')),1,1,''))
SET @SQL= @SQL+@maxPortion+' FROM #temp
PIVOT
(
MAX(ET_Status) FOR ET IN ('+@pvtCol+')) p
GROUP BY ID,[Description]'
--SELECT @SQL
EXEC sp_executesql @SQL
DROP TABLE #temp
If you have any question, feel free to let me know