Как сформировать матрицу расстояний между участками в T- SQL? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть все данные (места и расстояния уже).

Теперь мне нужно сформировать матрицу строк для использования в качестве входных данных для сценария python.

У меня есть сайты и расстояния как (возвращенные из запроса):

A|B|5
A|C|3
A|D|9
B|C|7
B|D|2
C|D|6

Какой самый эффективный (самый быстрый) способ создать аналогичную матрицу:

  A|B|C|D
A|0|5|3|9
B|5|0|7|2
C|3|7|0|6
D|9|2|6|0

Я четко прошу наиболее эффективный способ потому что в настоящее время мы используем курсор (fast_forward) и не можем получить результат для более чем 600 сайтов.

Спасибо

1 Ответ

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

Вы можете использовать условное агрегирование:

select x,
       max(case when y = 'A' then distance else 0 end) as A,
       max(case when y = 'B' then distance else 0 end) as B,
       max(case when y = 'C' then distance else 0 end) as C,
       max(case when y = 'D' then distance else 0 end) as D
from t cross apply
     (values (col1, col2), (col2, col1)) v(x, y)
group by x;

Я предупрежу вас о попытке масштабировать это. SQL Сервер имеет ограничение на количество столбцов, которые могут быть возвращены запросом. Он не сможет масштабироваться намного дальше 600 сайтов.

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