Транспонировать \ pivot пару строк с двумя столбцами, где один - DateTime, а другой - текст в SQL Server. - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть следующая структура таблицы и данные:

enter image description here

Данные упорядочены ASC, и для каждого Master Clear есть последующий Blend Closed.Если нет последующего Blend Closed, тогда он должен получить NULL.

Теперь я хотел бы получить следующий результат:

Master Clear                Blend Closed
2018-09-17 03:12:03         2018-09-17 10:00:03
2018-09-17 10:37:03         2018-09-18 01:05:02
2018-09-18 04:55:02         2018-09-18 21:51:00
2018-09-18 22:55:00         2018-09-19 03:02:01
.                           .
.                           .
.                           .
2018-09-23 20:10:56         NULL

Это получение пар строк и перемещениеTime значение столбца в соответствующем столбце Value: Master Clear или Blend Closed.

Я пытался получить эту форму данных, но никак не мог.Есть ли способ добиться этого с помощью T-SQL?

1 Ответ

0 голосов
/ 26 сентября 2018

Один из вариантов - назначить номер строки каждой группе значений, а затем выполнить обычный сводный запрос:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Value ORDER BY Time) rn
    FROM [BUR_BLEND].[dbo].[BLEND_START_END_TIMES]
)

SELECT
    MAX(CASE WHEN Value = 'Master Clear' THEN Time END) AS [Master Clear],
    MAX(CASE WHEN Value = 'Blend Closed' THEN Time END) AS [Blend Closed]
FROM cte
GROUP BY rn
ORDER BY rn;

enter image description here

Демонстрация

Обратите внимание, что в этом ответе предполагается, что записи Master Clear и Blend Closed всегда объединяются в логические пары и пробелов нет.Если нет, то нам придется проделать больше работы для генерации вашего вывода.

...