Quero obter apenas linhas com um valor NULL
e algum outro valor que não seja NULL
uma coluna de nome de usuário específica.
Se ambas as linhas tiverem nulo para esse nome de usuário específico ou ambos tiverem alguns valores diferentes de nulo, ele não deverá aparecer na saída. Se houver mais de duas linhas para o mesmo nome de usuário com nulo e algum outro valor, elas deverão aparecer.
Abaixo está um exemplo de amostra e saída. Como isso pode ser feito usando a consulta sql?
+----------+-------+
| username | col2 |
+----------+-------+
| a | abc |
| a | ef |
| b | null |
| b | null |
| c | der |
| c | null |
+----------+-------+
resultado
+----------+------+
| username | col2 |
+----------+------+
| c | der |
| c | null |
+----------+------+
sql-server
t-sql
Pesquisador de TI
fonte
fonte
d, der
e 2 comd, null
?e, one
,e, two
e 2 ou mais come, null
?Respostas:
Você deve poder usar a agregação condicional para obter o nome de usuário com um valor
col2
e tambémnull
.Eu sugiro usar uma cláusula HAVING com as condições. A consulta seria semelhante a:
Consulte SQL Fiddle com demonstração . Essa consulta agrupa seus dados por cada nome de usuário e, em seguida, usa lógica condicional para verificar se
col2
atende às duas condições desejadas - ondecol2
não é nulo ecol2
é nulo.Você pode usar isso em uma subconsulta, etc, para obter os valores
username
ecol2
:Consulte SQL Fiddle com demonstração .
Se você tiver mais de uma
col2
linha com ambosnull
e outro valor, precisará alterarHAVING
ligeiramente a cláusula:Veja SQL Fiddle com demonstração
fonte
HAVING
cláusula para ser>=1
- sqlfiddle.com/#!3/8af72/2Outra solução:
Na mesma linha lógica:
Ainda outra:
fonte
Apenas outra maneira de fazer isso:
fonte
Este também funciona. Demonstração do SQL Fiddle
Eu obtenho C1 como o total de linhas para cada nome de usuário, C2 como o total de linhas nulas para cada nome de usuário e comparo esses valores posteriormente.
fonte
Eu usaria a subconsulta para selecionar nomes de usuário como:
fonte
Eu tentei com este ...
fonte
col2
não estará na saída.