Я использую SQL server 2014, и у меня есть следующий набор данных ниже. Он содержит текущий и исторический статус сериализованного розничного товара:
SERIAL STATUS UPDATE_DATE
123456789 Received 2020-03-04 10:33:10.0000000
123456789 Scanned 2020-03-04 17:00:32.0000000
123456789 Triaged 2020-03-04 17:04:30.0000000
123456789 Sold 2020-04-03 20:34:57.0000000
Я построил следующий запрос для горизонтального поворота дат состояния.
SELECT * FROM(
SELECT SERIAL, [STATUS], [UPDATE_DATE]
FROM #TEMP ) AS PivotTable
PIVOT(MIN (UPDATE_DATE) FOR [STATUS] IN ([Received],[Scanned],[Triaged],[Sold])) AS P1
Это прекрасно работает, и сгенерировал следующий вывод:
SERIAL Received Scanned Triaged Sold
123456789 2020-03-04 10:33 2020-03-04 17:00 2020-03-04 17:04 2020-04-03 20:34
Однако я также собираюсь включить статус самого последнего элемента. Как мне добиться этого?
Желаемый вывод:
SERIAL STATUS Received Scanned Triaged Sold
123456789 Sold 2020-03-04 10:33 2020-03-04 17:00 2020-03-04 17:04 2020-04-03 20:34
Вот код для построения временной таблицы:
SELECT * INTO #TEMP
FROM (
SELECT N'123456789' AS SERIAL, N'Received' AS [STATUS], N'2020-03-04 10:33' AS [UPDATE_DATE] UNION
ALL
SELECT N'123456789' AS SERIAL, N'Scanned' AS [STATUS], N'2020-03-04 17:00' AS [UPDATE_DATE] UNION ALL
SELECT N'123456789' AS SERIAL, N'Triaged' AS [STATUS], N'2020-03-04 17:04' AS [UPDATE_DATE] UNION ALL
SELECT N'123456789' AS SERIAL, N'Sold' AS [STATUS], N'2020-04-03 20:34' AS [UPDATE_DATE] ) t;