Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

помогите создать SQL запрос


Страницы:   1 2 3 4

toropoff ©   (2011-10-10 18:16:00) 

есть таблица с полем ID.
нумерую сам при добавлении.
необходимо произвести перенумерацию упорядочив по определенному полю, например naimen.
база Access.
в таблице около полусотни тысяч записей.
путем перебора очень долго получается.
хотелось бы одним запросом перенумеровать поле ID значением номера строки.
что-то типа
UPDATE myTable SET id =  номер записи
но как-то ещё учесть упорядочивание по полю naimen

простите что прошу готовое решение, никак не получается


Труп Васи Доброго   (2011-10-12 13:00:00) [1]

Попробуй рассказать по русски что откуда берётся и куда кладётся.
"Оператор формирует новый прайс" - КАК???
1) Тупо стирает базу товаров и набирает руками заново? Тогда о какой выборке и скорости речь?
2) Оператор создаёт новый прайс на основе некоего справочника товаров? Как происходит процесс и куда помещается результат? Он проставляет некие метки в справочнике, что товар выбран или переносит сведения о товаре в некую новую таблицу? Опять не ясно о какой выборке и скорости речь, если оператор руками всё делает. Главный вопрос - если в любом случае создаётся НОВАЯ (в смысле пустая) таблица "каталог товаров" и заполняется раз в месяц, то КТО МЕШАЕТ один раз заполнить поле ID, сразу после создания таблицы оператором? Создал -> отсортировал -> пронумеровал (способ ИМХО не имеет значения ибо любой будет быстрым по сравнению со временем заполнения таблицы оператором).
Поясни что не так?


OW   (2011-10-12 11:14:00) [2]


> это же путь в ад

+1


Кщд   (2011-10-12 11:06:00) [3]

>OW ©   (11.10.11 17:42) [67]
>вот такой трюк находил как-то. Чисто из любопытства
это же путь в ад
опуская проблему с дубликатами имен, делать - теоретически - full table scan для каждой строки результирующего набора только для того, чтобы пронумеровать?


SQLEX   (2011-10-11 20:23:00) [4]


> знайка   (11.10.11 17:49) [68]

м-да? :) нет :))
на не свои вопросы, чтобы не зашорится, не читаю чужих советов
кроме Мастеров (ну и еще пару человек )


sniknik   (2011-10-11 20:03:00) [5]

> Менять коды, это же сумашедствие.
а я сталкивался... причем код как часть баркода, в магазине. учет всегда был в минус...
после переделки кодов по нормальному, и нормальный штучный учет, как же они были счастливы, на учете меня, постороннего человека (я просто систему делал), "ловили" и хвалились "представляете у нас за полгода недостача только ремень и носки!!!!" (что кстати вполне может быть "естественной" убылью... ну реально сперли ;).


Anatoly Podgoretsky   (2011-10-11 19:29:00) [6]


> Так надо же проктально сделать - кадый месяц грохать старый
> прайс и создавать новый с новыми кодами.

Менять коды, это же сумашедствие.


знайка   (2011-10-11 17:49:00) [7]


> вот такой трюк находил как-то.
Это не в [20] ли посту? :)


OW   (2011-10-11 17:42:00) [8]

вот что правильно:
Для ручной печати нумеровать во время вывода, а так генераторы отчётов есть
для этого.

но,
вот такой трюк находил как-то. Чисто из любопытства

select
(select count(s.name)
from mytable s
where s.name < = t.name) as mycount,
t.name
from mytable t
order by t.name


Ega23   (2011-10-11 17:14:00) [9]


> Т.е в общем случае придется заняться интимными отношениями
> с Select'ом и хранимкой?


В общем - непонятно. Суть задачи лично мне так до сих пор и неясна.


Inovet   (2011-10-11 17:01:00) [10]

> [64] Cobalt ©   (11.10.11 16:56)
> Т.е в общем случае придется заняться интимными отношениями с Select'ом и хранимкой?

Для ручной печати нумеровать во время вывода, а так генераторы отчётов есть для этого.


Cobalt   (2011-10-11 16:56:00) [11]

Т.е в общем случае придется заняться интимными отношениями с Select'ом и хранимкой?


Inovet   (2011-10-11 16:18:00) [12]

> [60] Cobalt ©   (11.10.11 16:04)
> Спасет ли OnCalcFields орд (если такая фигня нужна только для печати)?

Событие срабатывает много от чего, как-то инкремент в нём некошерно делать. Если только открыть и двигаться вниз, то вроде получиться. Но зачем оно так нужно.


Ega23   (2011-10-11 16:10:00) [13]


> Спасет ли OnCalcFields

В частном случае - да.
В общем - нет.


Sergey13   (2011-10-11 16:10:00) [14]

> [60] Cobalt ©   (11.10.11 16:04)
> если такая фигня нужна только для печати

Если только для печати - в репортерах обычно есть функция печати порядкового номера.


Cobalt   (2011-10-11 16:04:00) [15]

Кстати, интересный вопрос :-)
Делаю выборку, допустим, товаров из базы, упорядоченных по алфавиту, и хочу вывести с порядковым номером
Этакий Автоинкремент.
Спасет ли OnCalcFields орд (если такая фигня нужна только для печати)?


Inovet   (2011-10-11 15:34:00) [16]

> [58] Ega23 ©   (11.10.11 15:25)
> Для решения твоей проблемы (ИМХО, крайне надуманной) нужно
> завести в таблице ещё одно поле, что-нибудь типа PositionNr
> int not null

Тогда уж и историю этих PositionNr надо не в таблице с товарами держать, а сделать отдельную таблицу навроде год, месяц, ID, PositionNr. Иначе нафиг нужен ID если есть и так уникальный n. И вообще автор судя по
IntToStr(dmu.arrTab[myСurTabSheet].idTable)
каждый месяц создаёт новую таблицу.


Ega23   (2011-10-11 15:25:00) [17]


> не могли бы Вы для тупых чуть пояснить?


Мог бы. Я уже выше писал: ID суть неприкосновенная вещь. С каким ID ты товар завёл, ровно с таким же ID он и должен умереть.
Для решения твоей проблемы (ИМХО, крайне надуманной) нужно завести в таблице ещё одно поле, что-нибудь типа PositionNr int not null
И вот его уже и перестраивать.
Как это сделать с помощью SQL для Access я не в курсе, ибо с ним не работал. Для MSSQL - нет проблем. Для Access, ИМХО, тоже, надо только чуток мануал покурить.


Inovet   (2011-10-11 15:24:00) [18]

> [52] armstrong   (11.10.11 14:37)

И эта. Где DisablerControls хоть их и нет?


Inovet   (2011-10-11 15:12:00) [19]

> [52] armstrong   (11.10.11 14:37)
> and (naimen= :mynaimen)

Наименование зачем менять сомо на себя

Ещё это можно заменить
TempCommand.Parameters.FindParam('newkod')
TempCommand.Parameters.FindParam('oldkod')


на индекс - один раз его определить, потом
TempCommand.Parameters[ioldkod].Values
TempCommand.Parameters[inewkod].Values


Inovet   (2011-10-11 15:03:00) [20]

> [53] Ega23 ©   (11.10.11 14:44)
> > проверил 4000 записей - 15 секунд.
>
> use SQL, Luke!

Так было 30 минут, теперь быстрее в 1800 / 15 > 100 раз


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо