Я получаю доступ к представлению на SQL Сервер, который сохраняется как приложение из приложения
SELECT *
FROM
(
VALUES
(1, 'Open', { ts '2020-01-10 23:56:12' }),
(1, 'Started', { ts '2020-01-10 23:56:12' }),
(1, 'Hold', { ts '2020-01-10 23:56:12' }),
(1, 'Sent', { ts '2020-01-11 15:33:22' }),
(1, 'Complete', { ts '2020-01-11 15:36:22' }),
(1, 'Closed', { ts '2020-01-13 16:43:33' }),
(2, 'Open', { ts '2020-02-22 06:43:33' }),
(2, 'Started', { ts '2020-02-22 06:43:33' }),
(2, 'Clarify', { ts '2020-03-23 08:33:53' }),
(2, 'Closed', { ts '2020-03-24 08:33:53' })
) t (WO, WO_Status, WO_Status_Date)
. Это генерирует следующее
| WO | WO_Status | WO_Status_Date |
+----+-----------+-------------------------+
| 1 | Open | 2020-01-10 23:56:12.000 |
| 1 | Started | 2020-01-10 23:56:12.000 |
| 1 | Hold | 2020-01-10 23:56:12.000 |
| 1 | Sent | 2020-01-11 15:33:22.000 |
| 1 | Complete | 2020-01-11 15:36:22.000 |
| 1 | Closed | 2020-01-13 16:43:33.000 |
| 2 | Open | 2020-02-22 06:43:33.000 |
| 2 | Started | 2020-02-22 06:43:33.000 |
| 2 | Clarify | 2020-03-23 08:33:53.000 |
| 2 | Closed | 2020-03-24 08:33:53.000 |
Все, что я хочу - это создать номер строки / WO согласно внутреннему порядку строк.
Итак, мой желаемый результат -
| WO | WO_Status | WO_Status_Date | Order |
+----+-----------+-------------------------+-------+
| 1 | Open | 2020-01-10 23:56:12.000 | 1 |
| 1 | Started | 2020-01-10 23:56:12.000 | 2 |
| 1 | Hold | 2020-01-10 23:56:12.000 | 3 |
| 1 | Sent | 2020-01-11 15:33:22.000 | 4 |
| 1 | Complete | 2020-01-11 15:36:22.000 | 5 |
| 1 | Closed | 2020-01-13 16:43:33.000 | 6 |
| 2 | Open | 2020-02-22 06:43:33.000 | 1 |
| 2 | Started | 2020-02-22 06:43:33.000 | 2 |
| 2 | Clarify | 2020-03-23 08:33:53.000 | 3 |
| 2 | Closed | 2020-03-24 08:33:53.000 | 4 |
Чтобы добраться до этого, я попытался выполнить следующее
SELECT
a.*,
ROW_NUMBER() OVER (PARTITION BY (a.[WO]) ORDER BY a.[WO_Status_Date] ASC) AS [Natural Order]
FROM
(SELECT *
FROM
(VALUES
(1, 'Open', { ts '2020-01-10 23:56:12' }),
(1, 'Started', { ts '2020-01-10 23:56:12' }),
(1, 'Hold', { ts '2020-01-10 23:56:12' }),
(1, 'Sent', { ts '2020-01-11 15:33:22' }),
(1, 'Complete', { ts '2020-01-11 15:36:22' }),
(1, 'Closed', { ts '2020-01-13 16:43:33' }),
(2, 'Open', { ts '2020-02-22 06:43:33' }),
(2, 'Started', { ts '2020-02-22 06:43:33' }),
(2, 'Clarify', { ts '2020-03-23 08:33:53' }),
(2, 'Closed', { ts '2020-03-24 08:33:53' })
) t (WO, WO_Status, WO_Status_Date)
) a
, которое приводит к такому результату:
| WO | WO_Status | WO_Status_Date | Natural Order |
+----+-----------+-------------------------+---------------+
| 1 | Started | 2020-01-10 23:56:12.000 | 1 |
| 1 | Hold | 2020-01-10 23:56:12.000 | 2 |
| 1 | Open | 2020-01-10 23:56:12.000 | 3 |
| 1 | Sent | 2020-01-11 15:33:22.000 | 4 |
| 1 | Complete | 2020-01-11 15:36:22.000 | 5 |
| 1 | Closed | 2020-01-13 16:43:33.000 | 6 |
| 2 | Started | 2020-02-22 06:43:33.000 | 1 |
| 2 | Open | 2020-02-22 06:43:33.000 | 2 |
| 2 | Clarify | 2020-03-23 08:33:53.000 | 3 |
| 2 | Closed | 2020-03-24 08:33:53.000 | 4 |
ORDER BY
перезаписывает внутренний порядок строк с повторяющимися значениями. Есть ли способ обойти это, получить желаемый результат.