SQL Server: select des valeurs à partir de plusieurs lignes lorsqu'une ligne est rencontrée

J'ai un products table, un produit spécifique peut contenir différents templates, le model 0 représente le model de base:

 Select * From products Where product_number = 12345; 

Résultat:

 id made_by product_number model ---------------------------------- 122 U123 12345 0 123 U123 12345 1 124 U552 12345 2 

Maintenant, je voudrais find seulement ces produits où le model de base (model = 0) made_by value diffère dans certains templates?

Dans cet exemple, je suis vraiment intéressé à avoir ce produit 12345 dans les résultats.

Sur la chose qui me vient à l'esprit est de sélectionner distinct et count, mais peut-être qu'il existe de meilleurs moyens?

Existe est une meilleure façon de le faire, mais vous pouvez le faire avec auto join aussi comme ci-dessous

Échantillon de restrster

 select t1.* from products t1 inner join products t2 on t1.product_number=t2.product_number and t1.made_by<>t2.made_by and t1.model<>0 and t2.model=0; 

Exemple de données

select * parmi les produits;

 +-----+---------+----------------+-------+ | id | made_by | product_number | model | +-----+---------+----------------+-------+ | 122 | U123 | 12345 | 0 | | 123 | U123 | 12345 | 1 | | 124 | U552 | 12345 | 2 | | 125 | U5 | 12346 | 0 | | 126 | U5 | 12346 | 1 | | 127 | U6 | 12347 | 0 | | 128 | U7 | 12347 | 1 | +-----+---------+----------------+-------+ 

Sortie

 +-----+---------+----------------+-------+ | id | made_by | product_number | model | +-----+---------+----------------+-------+ | 124 | U552 | 12345 | 2 | | 128 | U7 | 12347 | 1 | +-----+---------+----------------+-------+ 

Vous pouvez utiliser une exists requête exists pour vérifier un made_by différent pour le même product_number :

 select product_number from YourTable yt1 where yt1.model = 0 and exists ( select * from YourTable yt2 where yt1.product_number = yt2.product_number and yt2.made_by <> yt1.made_by )