Как написать запрос

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

Я так понимаю привести таблицу к такому виду невозможно. Тогда остается после выполнения запроса растаскивать данные по StringGrid или F1Book (в Dephi), а это займет много времени. Подскажите как можно реализовать это по другому.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Ключевые слова для поиска Cross-Tab reports.
См. например тут: http://www.databasejournal.com/features ... hp/3521101
Даже самый дурацкий замысел можно воплотить мастерски
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

Новая проблема: помещаю код где создается VIEW в запрос в Delphi, а он не выполняется. Выдаются сообщения о синтаксических ошибках. Что делать?
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

И Еще вот что: в таблице reps в поле date может быть разное время для одной даты и при создание VIEW датам 2005-01-01 01:00:00 и 2005-01-01 02:00:00 присваиваются разные индексы, надо чтобы время не учитывалось и у этих дат был 1 код.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

помещаю код где создается VIEW в запрос в Delphi
Зачем?! Это серверный объект. Создал один раз, как таблицу, и забыл про него. И запрос лучше всего процедурой хранимой оформить, чтобы когда понадобиться в нём что-то изменить, код дельфёвый не ковырять. Да и производительность повысится.
и у этих дат был 1 код.
Зачем тебе коды? Их нет в исходной таблице, значит и во вьюхе они лишние.
сделай во вьюху такую выборку: convert(varchar(10), report_date, 104) и join делай по этой же конструкции.
Даже самый дурацкий замысел можно воплотить мастерски
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

Что-то с convert(varchar(10), report_date, 104) ничего не получается. Почемуто всегда в результате 0 строк. Кстати View все же создается долго. Как получить нужный результат используя вложенные запросы.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Что-то с convert(varchar(10), report_date, 104) ничего не получается. Почемуто всегда в результате 0 строк
Перечитай внимательно моё сообщение. Там всё описано. Более того, вариант проверен и он работает. Но полностью код давать принципиально не хочу.
Кстати View все же создается долго.
Не дольше, чем любая таблица или хранимая процедура. Подругому н-е-б-ы-в-а-е-т. Медленно только выборка из вьюхи может работать.
Как получить нужный результат используя вложенные запросы.
а) переделай структуру таблиц
б) используй временные таблицы. Это точно будет не быстрее создания вьюхи, но быстрее при выборке. Bulk insert (select into)ускорит заполнение временной таблицы.
Даже самый дурацкий замысел можно воплотить мастерски
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

OK. Все работает правильно. У меня в базе 1700 работников, а период времени максимально пол года. Это выполняется 4 минуты на компе с оперативо1 1G и процессором Pentium 4 2600MHz. Это нормально.
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

Все же мне надо как-то запутить эту штуку через Deplhi, чтобы пользователь мог задать нужный период и получил на экране таблицу с результатами.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Прошу прощения у старших, что я опять влажу :roll:
AiK писал(а):Зачем?! Это серверный объект. Создал один раз, как таблицу, и забыл про него.
Viktor Zull, тебе нужно всего лишь один раз создать этот самый VIEW. Загружаешь свой редактор БД, создаёшь, коммитиш (если в MSSQL такое есть).

Детальнее про это можно прочитать тут

Далее тебе нужно на Делфи выполнить всего лишь один SELECT (описанный AiKом тут: 13.11.05 20:57).

Если из Делфи не получается соединиться с БД и послать запрос - спроси в соседней ветке форума, как это делается.

Если же действительно Делфи говорит, что неправильный синтаксис запроса - покажи, пожалуйста, какое именно сообщение возвращается.

А как уж представить данные, полученные программой, это уже соовершенно другая история... (и опять же таки касается исключительно Делфи).
Ответить