Я хочу получить только строки, имеющие значение NULL
и некоторые другие значения, чем NULL
для определенного столбца имени пользователя.
Если обе строки имеют значение NULL для данного имени пользователя или обе имеют значения, отличные от NULL, то они не должны появляться в выходных данных. Если существует более двух строк для одного имени пользователя с нулевым и другим значением, они должны появиться.
Ниже приведен пример выборки и вывода. Как это можно сделать с помощью SQL-запроса?
+----------+-------+
| username | col2 |
+----------+-------+
| a | abc |
| a | ef |
| b | null |
| b | null |
| c | der |
| c | null |
+----------+-------+
вывод
+----------+------+
| username | col2 |
+----------+------+
| c | der |
| c | null |
+----------+------+
sql-server
t-sql
IT исследователь
источник
источник
d, der
и 2 сd, null
?e, one
,e, two
и 2 или более сe, null
?Ответы:
Вы должны быть в состоянии использовать условную агрегацию, чтобы получить имя пользователя как со значением,
col2
так и сnull
.Я бы предложил использовать предложение HAVING с условиями. Запрос будет похож на:
Смотрите SQL Fiddle с демонстрацией . Этот запрос группирует ваши данные по каждому имени пользователя, а затем использует условную логику, чтобы проверить,
col2
удовлетворяет ли оба условия, которые вы хотите - гдеcol2
не ноль иcol2
ноль.Вы можете использовать это в подзапросе, и т.д. , чтобы получить
username
иcol2
значение:Смотрите SQL Fiddle с демонстрацией .
Если у вас более одной
col2
строки с обоимиnull
и другим значением, то вам просто нужноHAVING
немного изменить предложение:Смотрите SQL Fiddle с демо
источник
HAVING
предложение на>=1
- sqlfiddle.com/#!3/8af72/2Другое решение:
В том же логическом ключе:
Еще один:
источник
Просто еще один способ сделать это:
источник
Этот тоже работает. SQL Fiddle demo
Я получаю C1 как общее количество строк для каждого имени пользователя, C2 как общее количество пустых строк для каждого имени пользователя, и я сравниваю эти значения позже.
источник
Я бы использовал подзапрос, чтобы выбрать такие имена пользователей, как:
источник
Я пытался с этим ...
источник
col2
не будет в выходных данных.