Quiero obtener solo filas que tengan un valor NULL
y algún otro valor que no sea NULL
para una columna de nombre de usuario en particular.
Si ambas filas tienen un valor nulo para ese nombre de usuario en particular o ambos tienen algunos valores distintos de nulo, entonces no debería aparecer en la salida. Si hay más de dos filas para el mismo nombre de usuario con nulo y algún otro valor, entonces deberían aparecer.
A continuación se muestra un ejemplo de muestra y salida. ¿Cómo se puede hacer usando la consulta SQL?
+----------+-------+
| username | col2 |
+----------+-------+
| a | abc |
| a | ef |
| b | null |
| b | null |
| c | der |
| c | null |
+----------+-------+
salida
+----------+------+
| username | col2 |
+----------+------+
| c | der |
| c | null |
+----------+------+
sql-server
t-sql
Investigador de TI
fuente
fuente
d, der
y 2 cond, null
?e, one
,e, two
y 2 o más cone, null
?Respuestas:
Debería poder usar la agregación condicional para obtener el nombre de usuario con un valor
col2
y también connull
.Sugeriría usar una cláusula HAVING con las condiciones. La consulta sería similar a:
Ver SQL Fiddle con Demo . Esta consulta agrupa sus datos por cada nombre de usuario y luego utiliza la lógica condicional para verificar si
col2
cumple con las dos condiciones que desea, dondecol2
no es nulo ycol2
es nulo.Luego puede usar esto en una subconsulta, etc. para obtener los valores
username
ycol2
:Ver SQL Fiddle con Demo .
Si tiene más de una
col2
fila con ambosnull
y otro valor, solo necesita modificar laHAVING
cláusula ligeramente:Ver SQL Fiddle con Demo
fuente
HAVING
cláusula para que sea>=1
- sqlfiddle.com/#!3/8af72/2Otra solución:
En una vena lógica similar:
Aún otra:
fuente
Solo otra forma de hacerlo:
fuente
Este también funciona. Demostración de SQL Fiddle
Obtengo C1 como las filas totales para cada nombre de usuario, C2 como las filas nulas totales para cada nombre de usuario y comparo estos valores más adelante.
fuente
Usaría la subconsulta para seleccionar esos nombres de usuario como:
fuente
Lo intenté con este ...
fuente
col2
no estará en la salida.