Вы также можете применить оператор pivot к динамическому SQL.
Например:
create table test03
(
Symbol varchar(30),
PartOfDay int,
isProfitable int
)
insert into test03 values
('ACRX',3,0),
('ACRX',3,0),
('ANF',2,1),
('ANF',2,1),
('ANF',2,1),
('NVDA',3,1),
('RSX',3,0),
('RSX',3,0)
--Query
DECLARE @V_COLUMNS VARCHAR(MAX)
DECLARE @V_SQL VARCHAR(MAX)
SET @V_COLUMNS=STUFF((SELECT DISTINCT ','+QUOTENAME(Symbol) FROM test03 FOR XML PATH('')),1,1,'')
--print @V_COLUMNS
SET @V_SQL='
;WITH CTE AS
(
select
ROW_NUMBER() over (order by Symbol) as RN,
Symbol,
1 AS V_VALUE,
PartOfDay,
isProfitable
from test03
)
SELECT '+@V_COLUMNS+',PartOfDay,isProfitable
FROM CTE
PIVOT
(
COUNT(V_VALUE) FOR Symbol IN ('+@V_COLUMNS+')
) PVT'
--PRINT @V_SQL
EXEC(@V_SQL)
--Output
/*
ACRX ANF NVDA RSX PartOfDay isProfitable
----------- ----------- ----------- ----------- ----------- ------------
1 0 0 0 3 0
1 0 0 0 3 0
0 1 0 0 2 1
0 1 0 0 2 1
0 1 0 0 2 1
0 0 1 0 3 1
0 0 0 1 3 0
0 0 0 1 3 0
*/