A Microsoft extension to the ANSI SQL language that includes procedural programming, local variables, and various support functions.
drop table if exists Test
CREATE TABLE Test(
[id] [int] NULL,
[data] [date] NULL,
[field1] [float] NULL,
[field2] [float] NULL,
[field3] [float] NULL,
[field4] [float] NULL
)
GO
INSERT INTO Test
(id, data, field1, field2, field3, field4)
VALUES (1, CONVERT(DATETIME, '1955-01-16 00:00:00', 102), 2.3, 3.2, 4.5, 6.8)
,(1, CONVERT(DATETIME, '2022-01-16 00:00:00', 102), 2.3, 3.2, 4.5, 6.8)
,(2, CONVERT(DATETIME, '2022-02-16 00:00:00', 102), 2.3, 3.2, 4.5, 6.8)
,(3, CONVERT(DATETIME, '2022-03-16 00:00:00', 102), 2.3, 3.2, 4.5, 6.8)
,(4, CONVERT(DATETIME, '2022-04-16 00:00:00', 102), 2.3, 3.2, 4.5, 6.8)
,(5, CONVERT(DATETIME, '2022-05-16 00:00:00', 102), 2.3, 3.2, 4.5, 6.8)
,(6, CONVERT(DATETIME, '2022-06-16 00:00:00', 102), 2.3, 3.2, 4.5, 6.8)
,(7, CONVERT(DATETIME, '2022-07-16 00:00:00', 102), 2.3, 3.2, 4.5, 6.8)
,(8, CONVERT(DATETIME, '2022-08-16 00:00:00', 102), 2.3, 3.2, 4.5, 6.8)
Declare @sql1 as NVarchar(4000)
Declare @sql2 as NVarchar(4000)
Declare @Cols1 as NVarchar(4000)
Declare @Cols2 as NVarchar(4000)
Set @Cols1=null
Select @Cols1 = COALESCE(@Cols1 + ', ', '') + '('+QUOTENAME(COLUMN_NAME,'''')+',' + QUOTENAME(COLUMN_NAME)+')'
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE TABLE_NAME='Test' and COLUMN_NAME<>'data' and COLUMN_NAME<>'id'
Select @sql1=';with mycte as (Select
data, col,val
FROM Test
CROSS APPLY (Values ' + @Cols1 + ' ) d(col,val)
where id<>1
)
SELECT @Cols2 = STUFF( (SELECT '','' + ''Max(CASE WHEN data='' + quotename(data,'''''''') + '' THEN val else null end ) as '' + quotename(data) + char(10)+char(13)
FROM mycte
Group by data
order by data
FOR XML PATH(''''), TYPE).value(''.'', ''varchar(max)''), 1, 1, ''''); '
EXEC sp_executesql @sql1,N'@Cols2 NVARCHAR(4000) output',@Cols2 output
Set @sql2 =N';with mycte as (Select data, col,val
FROM Test t
CROSS APPLY (Values ' + @Cols1 + ' ) d(col,val) )
Select col, '+ @Cols2 + ' from mycte Group by col';
EXEC sp_executesql @sql2
drop table Test