у меня есть такая таблица:
Header FPSNs TotalSNs StartTime
2082 6 6 2020-04-08 10:30:02.000
2085 6 6 2020-04-08 15:42:18.000
2088 0 3 2020-04-08 19:00:22.000
2234 1 4 2020-04-08 06:04:01.000
2081 4 4 2020-04-09 21:32:27.000
2082 5 7 2020-04-09 13:33:51.000
2085 3 6 2020-04-09 07:53:34.000
2088 1 4 2020-04-09 17:21:27.000
2082 6 6 2020-04-14 15:00:08.000
2223 7 8 2020-04-14 06:41:47.000
2082 10 12 2020-04-15 08:32:20.000
2085 5 5 2020-04-15 11:10:16.000
2234 3 4 2020-04-15 12:24:13.000
2260 4 5 2020-04-15 10:16:44.000
, которую я конвертирую в это:
Header Result startdate
2082 6/6 2020-04-08
2085 6/6 2020-04-08
2088 0/3 2020-04-08
2234 1/4 2020-04-08
2081 4/4 2020-04-09
2082 5/7 2020-04-09
2085 3/6 2020-04-09
2088 1/4 2020-04-09
2082 6/6 2020-04-14
2223 7/8 2020-04-14
2082 10/12 2020-04-15
2085 5/5 2020-04-15
2234 3/4 2020-04-15
2260 4/5 2020-04-15
, чтобы наконец достичь этого:
Header 2020-04-08 2020-04-09 2020-04-14 2020-04-15
2081 NULL 4/4 NULL NULL
2082 6/6 5/7 6/6 10/12
2085 6/6 3/6 NULL 5/5
2088 0/3 1/4 NULL NULL
2223 NULL NULL 7/8 NULL
2234 1/4 NULL NULL 3/4
2260 NULL NULL NULL 4/5
Вот код, как это делается:
CREATE TABLE #final (Header varchar(max), Result varchar(max), startdate date);
INSERT INTO #final
SELECT Header
,CONVERT(varchar(10),FPSNs) + '/' + CONVERT(varchar(10),TotalSNs) as Result
-- ,LEFT(DATENAME(WEEKDAY,StartTime),3) as 'Day'
,convert(date, StartTime) as Startdate
FROM #ResultTable
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME([Startdate])
FROM #final
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
select * from #ResultTable
select * from #final
declare @query as nvarchar(max);
set @query = 'SELECT Header, '+@cols + 'FROM
(SELECT Startdate, header, Result from #final ) p
PIVOT
(MAX(Result) For Startdate in ( ' + +@cols + ')
)AS pvt'
execute(@query)
Эти операторы в коде представляют 3 таблицы выше:
- select * from # ResultTable
- select * from #final
- execute (@query)
Моя цель - отсортировать итоговую таблицу, используя подсчет TotalSN для каждой строки. Например. ниже TotalSN для каждой строки:
2081 4
2082 31
2085 17
2088 7
2223 8
2234 8
2260 5
итак, таблица должна выглядеть так:
Header 2020-04-08 2020-04-09 2020-04-14 2020-04-15
2082 6/6 5/7 6/6 10/12
2085 6/6 3/6 NULL 5/5
2223 NULL NULL 7/8 NULL
2234 1/4 NULL NULL 3/4
2088 0/3 1/4 NULL NULL
2260 NULL NULL NULL 4/5
2081 NULL 4/4 NULL NULL
Я трачу день, пытаясь понять это, но мне это не удалось. Есть ли решение для этого?