Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
dax
Member

Откуда:
Сообщений: 6
есть такая проблема, запрос
SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой

Select tpr2004,ass3001, ass3002
from tpr2,ass3
where ass3001=tpr2004
group by tpr2004,ass3001,ass3002
выводит следующие

tpr2004 ass3001 ass3002

10018 10018
10018 10018 4030855493012
10020 10020
10020 10020 4030855493128
10023 10023
10043 10043
10043 10043 4823010900490
10058 10058
10058 10058 4840257001995
10059 10059

мне надо вытащить все совпадения по ass3001=tpr2004 у которых есть ass3002 непустое, если у совпадения ass3001=tpr2004 нет не пустого поля ass3002 то тогда пустую строчку добавить, ну может не понятно, покажу наглядно, должно получится так:

10018 10018 4030855493012
10020 10020 4030855493128
10023 10023
10043 10043 4823010900490
10058 10058 4840257001995
10059 10059

нету дублирующих совпадений, вида
10018 10018
10018 10018 4030855493012
если есть число 4030855493012 , выбираем строчку 10018 10018 4030855493012 если нет то 10018 10018.
двумя запросами знаю как сделать, но надо одним, ну очень надо, а то двумя запросами машина вешается на пару часов, запесей больше 40 000 000.если можно как то сделать, очень прошу, ПОМОГИТЕ!
21 окт 11, 15:53    [11479946]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
Glory
Member

Откуда:
Сообщений: 104751
10018 10018
10018 10018 4030855493012
10018 10018
10018 10018 1030855493012

А если так будет, то что выбирать ?
21 окт 11, 15:56    [11479978]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
dax
Member

Откуда:
Сообщений: 6
Glory,

только
10018 10018 4030855493012
10018 10018 1030855493012
там где третий результат не пустой
но в том то и проблема что есть и уникальные пустые :( 10019 10019
21 окт 11, 16:00    [11480016]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
Glory
Member

Откуда:
Сообщений: 104751
dax
там где третий результат не пустой

Вот теперь собственно главный вопрос - а порядок записей то какое поле задает ?
21 окт 11, 16:02    [11480036]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
dax
Member

Откуда:
Сообщений: 6
Select tpr2004,ass3001, ass3002
from tpr2,ass3
where ass3001=tpr2004 and len(ass3002)>2
group by tpr2004,ass3001,ass3002

and len(ass3002)>2 выводит все не пустые, но нужны в плюс все пустые ass3002 которые не вошли в условие
ass3001=tpr2004 and len(ass3002)>2

в таблице может быть пустая строка которая удовлетворяет ass3001=tpr2004 и выдаст id= 10018
и в таблице в таблице может быть НЕпустая строка которая удовлетворяет ass3001=tpr2004 and len(ass3002)>2 и выдаст id= 10018

так в таком случае выбираться должна вторая строка под условие ass3001=tpr2004 and len(ass3002)>2
а если ass3001=tpr2004 and len(ass3002)>2 нету но есть ass3001=tpr2004 тогда выводим id пустой, с лаконичностью у Меня проблемы, начальствао вечно плюётся, уж извините :(
21 окт 11, 16:08    [11480104]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
dax
Member

Откуда:
Сообщений: 6
Glory,

задаёт group by tpr2004,ass3001,ass3002
order by ass3001
21 окт 11, 16:10    [11480118]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
iljy
Member

Откуда:
Сообщений: 8711
dax,

формулировка абсолютно невнятная, но, если хрустальный шар мне не врет, то надо примерно так:
DELETE t1
FROM tab1 t1
WHERE Field1 IS NULL AND
   EXISTS(
      SELECT * FROM tab1 t2
      WHERE t2.KeyField = t1.KeyField AND t2.OrderField > t1.OrderField AND t2.Field IS NOT NULL
   )
21 окт 11, 16:12    [11480139]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
Glory
Member

Откуда:
Сообщений: 104751
dax
order by ass3001

Это не гарантирует, что записи будут в имено в таком порядке
10018 10018
10018 10018 4030855493012
10018 10018
10018 10018 1030855493012
21 окт 11, 16:13    [11480151]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
dax
Member

Откуда:
Сообщений: 6
Glory,

да порядок та пофиг на самом деле и
Select tpr2004,ass3001, ass3002
from tpr2,ass3
where ass3001=tpr2004 and len(ass3002)<2 and EXISTS (Select tpr2004,ass3001, ass3002
from tpr2,ass3 where ass3001=tpr2004 and len(ass3002)>2)
group by tpr2004,ass3001,ass3002

не прокатило, вывел только пустые
21 окт 11, 16:18    [11480209]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
Glory
Member

Откуда:
Сообщений: 104751
dax
да порядок та пофиг на самом деле и

Вам понятное дело, что пофиг
Но вы тем не менее ставите задачу так, как будто такой порядок гарантирован

Наверное нужно изначальный запрос переписать, чтобы не было дубликатов
21 окт 11, 16:20    [11480236]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
dax
Member

Откуда:
Сообщений: 6
Glory,

таблица 1 (t1) имеет 1 000 000 записей где поле t1.f1 может дублироваться
таблица 2 (t2) имеет 300 000 записей где строка t2.f1-t2.f2 может быть пустой и дублироваться
при этом t2.f2 может быть не пустым и иметь одинаковый id с пустой строкой
10018
10018
10018 4030855493012
10018
надо найти все уникальный непустые id t2 (непустое может быть только один раз) которые входят в t1 и при этом если нет непустого но есть вхождение в t1 то его тоже вывести.
21 окт 11, 16:29    [11480351]     Ответить | Цитировать Сообщить модератору
 Re: SQL-запрос удаление пустых ячеек если есть не пустая которая идёт после пустой  [new]
Glory
Member

Откуда:
Сообщений: 104751
dax
таблица 1 (t1) имеет 1 000 000 записей где поле t1.f1 может дублироваться

почему бы тогда не убрать дубли сразу в подзапросе ?


dax
таблица 2 (t2) имеет 300 000 записей где строка t2.f1-t2.f2 может быть пустой и дублироваться

почему бы тогда не убрать дубли сразу в подзапросе ?
21 окт 11, 16:33    [11480392]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить