Разъяснения по кресту применяются - PullRequest
0 голосов
/ 06 марта 2020

У меня есть таблица, содержащая информацию, которая произошла за определенный день (1 день в строке). для каждой строки событие может происходить несколько раз.

| Id | Sector_1 | Sector_2 | WastedTime_1 | WastedTime_2 | FixingTime_1 | FixingTime_2 |
|----|----------|----------|--------------|--------------|--------------|--------------|
|  1 | A        | B        |           15 |           30 |           30 |           60 |
|  2 | B        | C        |           60 |          120 |          120 |          240 |

Обратите внимание, что я показываю здесь максимум 2 события, но оно может go до 20, и есть несколько других столбцов, например, DateTime_X, EmpName, et c.

Я хочу создать запрос, который будет «сводить» эти данные, чтобы вместо этого я мог видеть по одной строке на событие, даже если идентификаторы дублированы. Пример:

| Id | Sector | WastedTime | FixingTime |
|----|--------|------------|------------|
|  1 | A      |         15 |         30 |
|  1 | B      |         30 |         60 |
|  2 | B      |         60 |        120 |
|  2 | B      |        120 |        240 |

Я пытался сделать это с разворотом, но безуспешно. Во время исследования я увидел команду CROSS APPLY, попробовал ее, и она сработала.

SELECT      Id,
            StopEvent.*
FROM        #events
CROSS APPLY
(
    VALUES  (Sector_1, WastedTime_1, FixingTime_1),
            (Sector_2, WastedTime_2, FixingTime_2)
)   AS  StopEvent(Sector, WastedTime, FixingTime)

У меня вопрос , почему работает? Я немного прочитал эту команду и до сих пор не понимаю, почему она работает. Кроме того, CROSS APPLY является ли путь к go для этой операции или что-то еще?

1 Ответ

0 голосов
/ 06 марта 2020

В качестве альтернативы вы можете использовать UNION:

SELECT Id, Sector_1 AS Sector, WastedTime_1 AS Wasted_Time, FixingTime_1 AS FixingTime FROM #events
UNION ALL
SELECT Id, Sector_2, WastedTime_2, FixingTime_2 FROM #events
ORDER BY Id, Sector;

Ваш текущий подход с использованием APPLY может превзойти подход объединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...