Как отфильтровать дизайн из пользовательского кода в SQL Server

#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