/ / Utilisation de plusieurs critères de ligne dans la clause Where - sql-server-2008, tsql

Utilisation de critères de lignes multiples dans la clause Where - sql-server-2008, tsql

"J'essaie de formuler une requête qui me permettra de renvoyer toutes les lignes avec le même numéro d'identification si l'une des lignes répond à certains critères. Ma table actuelle et les tables souhaitées sont les suivantes:

Tableau actuel:

ID  Parameter
1   x
1   x
1   y
1   x
2   x
2   x
2   x
3   y
3   y
3   x
4   x
4   x
4   x

Les résultats souhaités:

ID  Parameter
1   x
1   x
1   y
1   x
3   y
3   y
3   x

Dans cet exemple, mon paramètre d'intérêt est "y". Puisque y apparaît dans au moins une des lignes pour les ID 1 et 3, toutes les données de ligne pour les ID 1 et 3 sont sélectionnées alors que les autres sont filtrées. Existe-t-il un moyen d'écrire cela dans une clause where ou devrais-je envisager une autre méthode?

Je vous remercie!

Réponses:

2 pour la réponse № 1

Essaye ça; il sélectionnera tous les enregistrements pour lesquels les identifiants ont au moins un enregistrement avec Parameter = "Y":

SELECT [ID], [Parameter]
FROM YourCurrentTable
WHERE [ID] IN (
SELECT [ID]
FROM YourCurrentTable
WHERE [Parameter] = "Y"
)

1 pour la réponse № 2

Pour des raisons de performances, vous devriez préférer utiliser EXISTS au lieu de IN. Voir ce fil pour comprendre les différences entre EXISTS et IN: Performances entre SQL Server IN et EXISTS

select id, parameter
from current_table c1
where exists (
select 1
from current_table c2
where c2.id = c1.id
parameter = "y"
);

0 pour la réponse № 3

Voici une façon de faire

    create table tret (i int, j char)
insert into tret values
(1,   "x"),
(1,   "x"),
(1,   "y"),
(1,   "x"),
(2,   "x"),
(2,   "x"),
(2,   "x"),
(3,   "y"),
(3,   "y"),
(3,   "x"),
(4,   "x"),
(4,   "x"),
(4,   "x")


select * from tret where i in (select i from tret where j = "y")