Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2017, 15:30   #1
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию sql, корректировка результирующей выборки

Всем доброго времени суток!

Подскажите, пожалуйста, как корректно обработать вот примерно такую выборку:
Код:
t2	t3	t4	        t9
Иванов	Иван	Иванович	
Петров	Петр	Петрович	
Петров	Петр	Петрович	1.2.1
Петров	Петр	Петрович	1.2.32.1
Петров	Петр	Петрович	1.2.37
Петров	Петр	Петрович	3.5
Сидоров	Сидор	Сидорович
чтобы на выходе удалилась строка Петров Петр Петрович с пустым значением в t9, а Иванов и Сидоров с пустыми в t9 остались. Т.е. люди которые пишутся один раз с пустым значением в t9 - все корректно. А вот для нескольких записей одного человека - с пустым лишняя. Надеюсь доступно описал проблему. Очень рассчитываю на помощь, коллеги.
nactyx вне форума Ответить с цитированием
Старый 20.06.2017, 15:44   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Посчитай сколько всего строк с Петром Петровичем и сколько их них с пустым t9. Если всего больше чем с пустым, то пустые не брать. Хуже если всего совпадет с тем в том числе. Там запомнить ид любой их них и не брать пустые кроме той, что с запомненным ид. Если ид нет, то скорее всего не получится
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.06.2017, 16:06   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а если запросом?
вроде такого:
Код:
select t2,t3,t4,t9 from Таблица1 
where t9='' and t2+t3+t4 not in (select t2+t3+t4 from Таблица1 where t9<>'')
union all 
select t2,t3,t4,t9 from Таблица1 where t9<>''
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.06.2017, 16:37   #4
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если запросом?
вроде такого:
Код:
select t2,t3,t4,t9 from Таблица1 
where t9='' and t2+t3+t4 not in (select t2+t3+t4 from Таблица1 where t9<>'')
union all 
select t2,t3,t4,t9 from Таблица1 where t9<>''
Не получается.
1.
Код:
select t2,t3,t4,t9 from Таблица1 
where t9=''
- это все с пустым t9
2.
Код:
select t2+t3+t4 from Таблица1 where t9<>''
- это все с не пустым t9, в данном примере 4 строки Петров. Т.е. из п.1. условию удовлетворяют, не входят.
3.
Код:
select t2,t3,t4,t9 from Таблица1 where t9<>''
- это тоже все с не пустым t9, в данном примере 4 строки Петров

В итоге мы и сложим три с пустым и четыре с не пустым и получим тоже самое Фак. Хотя логически вроде правильно, понять не могу, где не то.

Последний раз редактировалось nactyx; 20.06.2017 в 16:43.
nactyx вне форума Ответить с цитированием
Старый 20.06.2017, 16:41   #5
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Посчитай сколько всего строк с Петром Петровичем и сколько их них с пустым t9. Если всего больше чем с пустым, то пустые не брать. Хуже если всего совпадет с тем в том числе. Там запомнить ид любой их них и не брать пустые кроме той, что с запомненным ид. Если ид нет, то скорее всего не получится
Логика понятна. На уровне sql такое реализовать можно? Я что-то закипел уже и у меня как ни крути не получается, либо все пустые выкидываю, либо ничего.
nactyx вне форума Ответить с цитированием
Старый 20.06.2017, 16:49   #6
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Стоп, нашел неточность по поводу неправильной отработки варианта от Сержа (извиняюсь за фамильярность).

И-и-и, он заработал, чудо! Попробую теперь на большом объеме проверить.
nactyx вне форума Ответить с цитированием
Старый 20.06.2017, 16:50   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от nactyx Посмотреть сообщение
Не получается.
ничего не понял.
почему не получается?

запрос состоит из двух частей.
выполните их отдельно.

вот эта часть:
Код:
select t2,t3,t4,t9 from Таблица1 
where t9='' and t2+t3+t4 not in (select t2+t3+t4 from Таблица1 where t9<>'')
должна вернуть только эти записи:
Цитата:
Код:

t2	t3	t4	        t9
Иванов	Иван	Иванович	
Сидоров	Сидор	Сидорович
у них пустое T9 И (AND) нет таких же t2,t3,t4 с непустым t9
(этим мы отсекли запись "Петров Петр Петрович" с пустым t9)


вторая часть запроса ещё проще - вернуть все записи с непустым t9
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.06.2017, 16:50   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Об ид не услышал. Т.е. уникальный ключ записи. Кстати запрос от Сержа должен сработать, значит ид не нужен
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.06.2017, 17:20   #9
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Выше отписал, извиняюсь. Спасибо Вам огромное в очередной раз! Протестирую на рабочей базе на большом объеме - отпишусь. Уже завтра только.
nactyx вне форума Ответить с цитированием
Старый 21.06.2017, 10:52   #10
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Всё отлично, еще раз спасибо!
nactyx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL Хитрое совмещение выборки из двух таблиц Yuran БД в Delphi 13 10.08.2015 11:38
Вывод SQL выборки (компонент) Костанта C# (си шарп) 3 10.02.2014 07:01
sql запрос выборки Vitia28 Microsoft Office Access 1 11.09.2012 03:09
Работа с Postgre SQL(БД) и всевозможные выборки для оформления сайта manula PHP 1 06.07.2012 11:15
как составить sql запрос для выборки по имени,фамилии и отчеству betirsolt БД в Delphi 8 12.05.2010 22:44