У меня есть временная таблица, в которой хранятся данные свертки, и хотелось бы создать запрос, чтобы узнать, могу ли я немного очистить данные. Я думал, что это будет довольно легко, но оказалось, что это намного сложнее. Может быть, это легко, и я просто приближаюсь ко всему этому.Отфильтровать строки, возвращенные в подзапросе
То, что я пытаюсь сделать, это просто удалить строки, где Item = 'TOTALS', но где имя отображается только дважды. Поэтому в таблице ниже строки 7 и 9 должны быть удалены. Просто, чтобы вы знали, ключей нет.
Наименование. Пункт ...... Dlvrd
--------------------------
Bob. 102 .......... 18
Боб. 106 .......... 32
Боб. 108 .......... 34
Боб. 999 .......... 184
Bob .. TOTALS. 702
John. 64 ........... 86
John. ВСЕГО. 86
Jim .. 112 .......... 131
Jim .. TOTALS .. 131
Jane. 10 .......... 720
Jane. 12 ......... 217
Джейн. 999 ........ 867
Jane. СОСТАВИЛ 1848
Моя первая попытка состояла добавления столбца с графом столбца имя, а затем, используя, где положение, как: где имя = «2» и пункт = «TOTALS»!. Не работает, даже помещая вокруг них круглые скобки. Он просто удаляет любую строку с 2 или где Item = 'TOTALS'. Это полностью игнорирует «И». Вот моя SQL:
select t.count, tr.*
From #TempRollup tr
join (
select
Name
, COUNT(Name) count
from #TempRollup
Group by Name
) as t on t.Name = tr.Name
where (
t.count != 2
and Item != 'TOTALS'
)
Тогда я попробовал этот метод, который включает в себя создание подзапрос, чтобы найти строки, которые я хочу, чтобы игнорировать, а потом просто не выбирая их. Мой подзапрос захватывает правильные строки, но когда все это будет работать, ничего не возвращается .:
Select *
FROM #TempRollup
WHERE NOT EXISTS(
select tr.*
From #TempRollup tr
join (
select
Name
, COUNT(Name) count
from #TempRollup
Group by Name
) as t on t.Name = tr.Name
where t.count = 2
and Item = 'TOTALS'
)
Спасибо Lc.! Это был быстрый ответ и возвращает именно то, что мне нужно. Теперь я планирую выяснить, почему моя работа не работает. :-) – N1tr0
Причина, по которой она не работает, связана с тем, что вы не сопоставляли свой основной запрос с подзапросом NOT EXISTS. Поскольку одна строка, удовлетворяющая вашему запросу, существовала * где-то в таблице *, EXISTS вернула True для каждой строки. –
А, ок. Спасибо за объяснение. – N1tr0