Все ответы правильные .. но некоторые из них приведут к другому или даже худшему, непредсказуемому результату (не детерминированным).
в решении 1) группа за/мин от @ AllanS.Hansen и @GiorgosBetsos вы получите только одну строку t2 для каждой строки в t1. Строка будет выбрана с помощью функции min(), которая определена для почти каждого типа данных.
раствор 2) row_number = 1 от @vercelli такой же раствора 1) держать первый заказ значение с помощью COL3 ASC это то же самое из MIN()
обратите внимание! решение 3) внешнее применение от @ gofr1 похоже, но оно не гарантирует выход, верхняя функция может давать разные результаты при каждом прогоне, если вы не укажете заказом col3 (оптимизатор будет решать в зависимости от по индексам или кластеризованным ключам). Если вы укажете его, он даст тот же результат решения 1) и solution 2)
вы должны решить, что ТОП означает для вас, он может отличаться от значения функции TOP сервера sql.
Я думаю, что лучшим решением является добавление столбца в порядке сортировки.
Вы можете использовать целочисленный столбец, например 1,2,3 для порядка сортировки, или использовать идентификатор. В этом случае вы также будете иметь «вставки заказ»
Я избежать OUTER APPLY, поскольку он выполняется для каждой строки t1 и медленнее, чем другие решения.
ГРУППА BY/MIN() –
«(верхняя)» - как вы * определяете * верх в этом обстоятельстве? Таблицы не имеют неотъемлемого порядка. Итак, это строка с наименьшим значением '' col3'? Или какое-либо другое правило, использующее некоторые другие (не показаны) столбцы (столбцы)? –
@ AllanS.Hansen, и что, если значения в col3 были «a, b, c» вместо «10,20,30»? MIN работает? –