-1
votes

Comment sélectionner des lignes avec la même colonne_a mais différente colonne_b?

Je souhaite sélectionner des lignes dans SQL Server, mes questions ci-dessous:

Table2
-------------------------- 
|     Name   |    Type   |
--------------------------
|      A     |     1     |
|      A     |     2     |
|      A     |     3     |
|      D     |     1     |
|      D     |     2     |
|      D     |     3     |
|      .     |     .     |
|      .     |     .     |


0 commentaires

5 Réponses :


0
votes

Vous pouvez utiliser string_agg s'il s'agit de SQL Server 2017 et ci-dessus ou Azure SQL comme ci-dessous:

Select * from #yourTable yt join (
    select [name], string_agg([Type], ',') as st_types
    from #YourTable 
    group by [name] ) a 
on yt.name = a.[name] and a.st_types like '%1,2,3%'


0 commentaires

1
votes

Vous pouvez utiliser interner rejoindre code> S sur les trois Type CODE> Colonnes pour atteindre cet objectif:

Name    Type
A       1
A       2
A       3
D       1
D       2
D       3


0 commentaires

2
votes

Vous pouvez utiliser les fonctions de fenêtre pour cela:

name | type
:--- | ---:
A    |    1
A    |    2
A    |    3
D    |    1
D    |    2
D    |    3


0 commentaires

1
votes

Obtenir les noms avec Groupe par nom CODE> et définissez la condition dans la clause code> code>: xxx pré>

s'il y a pour la colonne Type code> Autres valeurs que 1, 2, 3 Code> ALORS: P>

> Name | Type
> :--- | ---:
> A    |    1
> A    |    2
> A    |    3
> D    |    1
> D    |    2
> D    |    3


0 commentaires

-1
votes

Je vous donne ceci, cela fonctionnera si vous avez:

SELECT * 
FROM Table1 
WHERE Name in (
SELECT Name from 
(
   SELECT Name, Type, count(Name) c from Table1 where Type = 1
   GROUP BY Name, Type 
   HAVING count(Name) = 1
   UNION
   SELECT Name, Type, count(Name) c from Table1 where Type = 2
   GROUP by Name, Type 
   HAVING count(Name) = 1
   UNION
   SELECT Name, Type, count(Name) c from Table1 where Type = 3
   GROUP by Name, Type 
   HAVING  count(Name) = 1) t 
GROUP by name
HAVING count(c) = 3)


1 commentaires

Solution de @gmb le fait aussi beaucoup plus de code :)