Je souhaite obtenir uniquement des lignes ayant une valeur NULL
et une autre valeur que NULL
pour une colonne de nom d'utilisateur particulière.
Si les deux lignes ont null pour ce nom d'utilisateur particulier ou si les deux ont des valeurs autres que null, cela ne devrait pas apparaître dans la sortie. S'il y a plus de deux lignes pour le même nom d'utilisateur avec null et une autre valeur, elles devraient apparaître.
Voici un exemple d'échantillon et de sortie. Comment cela peut-il être fait en utilisant la requête SQL?
+----------+-------+
| username | col2 |
+----------+-------+
| a | abc |
| a | ef |
| b | null |
| b | null |
| c | der |
| c | null |
+----------+-------+
production
+----------+------+
| username | col2 |
+----------+------+
| c | der |
| c | null |
+----------+------+
sql-server
t-sql
Chercheur informatique
la source
la source
d, der
et 2 avecd, null
?e, one
,e, two
et 2 ou plus avece, null
?Réponses:
Vous devriez pouvoir utiliser l'agrégation conditionnelle pour obtenir le nom d'utilisateur avec à la fois une valeur dans
col2
etnull
.Je suggère d'utiliser une clause HAVING avec les conditions. La requête serait similaire à:
Voir SQL Fiddle avec démo . Cette requête regroupe vos données par nom d'utilisateur et utilise ensuite une logique conditionnelle pour vérifier si elle
col2
remplit les deux conditions souhaitées - oùcol2
n'est pas nul etcol2
est nul.Vous pouvez ensuite l'utiliser dans une sous-requête, etc. pour obtenir les valeurs
username
etcol2
:Voir SQL Fiddle avec démo .
Si vous avez plusieurs
col2
lignes avec les deuxnull
et une autre valeur, il vous suffit de modifierHAVING
légèrement la clause:Voir SQL Fiddle avec démo
la source
HAVING
clause pour qu'elle soit>=1
- sqlfiddle.com/#!3/8af72/2Une autre solution:
Dans la même veine logique:
Encore un autre:
la source
Juste une autre façon de le faire:
la source
Celui-ci fonctionne aussi. Démo SQL Fiddle
J'obtiens C1 comme nombre total de lignes pour chaque nom d'utilisateur, C2 comme nombre total de lignes nulles pour chaque nom d'utilisateur et je compare ces valeurs plus tard.
la source
J'utiliserais la sous-requête pour sélectionner ces noms d'utilisateur comme:
la source
J'ai essayé avec celui-ci ...
la source
col2
ne sera pas dans la sortie.