#sql #sql-server #tsql #sql-server-2017
Вопрос:
Я создал таблицу tblTread
со следующими столбцами и образцами данных:
TreadId TreadSize Design SupplierCode SupplierName ---------------------------------------------------------- 3025 150 R SU01 ALEX 3026 150 L SU01 ALEX 3027 150 R SU02 SANDANUWAN 3028 150 L SU02 SANDANUWAN
Теперь я хочу отфильтровать TreadSize
и Design
по SupplierCode
. Я попытался это сделать, но получил следующий результат.
SELECT Design FROM tblTread WHERE TreadSize = '150'
Выход:
Design R L R L
Но здесь я хочу , чтобы это было Design
связано только с тем SupplierCode
, как это
Design R L
Комментарии:
1. Я хочу получить только дизайн, связанный с кодом поставщика — так какой код поставщика?
2. Возможно… Выберите отдельный дизайн из tblTread, где Размер протектора = «150» и код поставщика = «SU01».
Ответ №1:
Я подозреваю, что вы читаете этот набор результатов:
Дизайн |
---|
R |
L |
R |
L |
и вы ожидаете, что, поскольку повторяется одно и то же значение, SQL Server должен консолидировать эти результаты на основе этого, не показывая вам, почему записи отличаются.
Механизм запросов не уменьшает и не может уменьшать или консолидировать количество возвращаемых строк, если только ему не будет дано соответствующее указание, независимо от количества возвращаемых столбцов, их значений или порядка их представления.
Чтобы консолидировать свои результаты, вы должны предоставить инструкции для механизма запросов о том, как выполнить эту консолидацию. Комментарий @John Cappelletti иллюстрирует три способа сделать это: добавьте DISTINCT
ключевое слово, чтобы исключить избыточные значения в столбцах, выбранных для возврата; предоставьте дополнительные WHERE
предикаты, чтобы ограничить результаты конкретными условиями (например, кодом поставщика); или сделайте и то, и другое.
Третий из этих вариантов, вероятно, будет наиболее правильным, исходя из логических требований, которые вы формулируете как «Я хочу, чтобы Design
это касалось только SupplierCode
«. Этот подход DISTINCT
с WHERE
предикатом на SupplierCode исключит строки для других поставщиков из результирующего набора, а также удалит избыточные строки на основе значений столбцов, указанных в SELECT