Страница 2 из 3
Добавлено: 14 ноя 2005, 01:01
Viktor Zull
Я так понимаю привести таблицу к такому виду невозможно. Тогда остается после выполнения запроса растаскивать данные по StringGrid или F1Book (в Dephi), а это займет много времени. Подскажите как можно реализовать это по другому.
Добавлено: 14 ноя 2005, 01:12
AiK
Ключевые слова для поиска Cross-Tab reports.
См. например тут:
http://www.databasejournal.com/features ... hp/3521101
Добавлено: 14 ноя 2005, 10:00
Viktor Zull
Новая проблема: помещаю код где создается VIEW в запрос в Delphi, а он не выполняется. Выдаются сообщения о синтаксических ошибках. Что делать?
Добавлено: 14 ноя 2005, 12:32
Viktor Zull
И Еще вот что: в таблице reps в поле date может быть разное время для одной даты и при создание VIEW датам 2005-01-01 01:00:00 и 2005-01-01 02:00:00 присваиваются разные индексы, надо чтобы время не учитывалось и у этих дат был 1 код.
Добавлено: 14 ноя 2005, 22:06
AiK
помещаю код где создается VIEW в запрос в Delphi
Зачем?! Это серверный объект. Создал один раз, как таблицу, и забыл про него. И запрос лучше всего процедурой хранимой оформить, чтобы когда понадобиться в нём что-то изменить, код дельфёвый не ковырять. Да и производительность повысится.
и у этих дат был 1 код.
Зачем тебе коды? Их нет в исходной таблице, значит и во вьюхе они лишние.
сделай во вьюху такую выборку: convert(varchar(10), report_date, 104) и join делай по этой же конструкции.
Добавлено: 15 ноя 2005, 00:58
Viktor Zull
Что-то с convert(varchar(10), report_date, 104) ничего не получается. Почемуто всегда в результате 0 строк. Кстати View все же создается долго. Как получить нужный результат используя вложенные запросы.
Добавлено: 15 ноя 2005, 01:53
AiK
Что-то с convert(varchar(10), report_date, 104) ничего не получается. Почемуто всегда в результате 0 строк
Перечитай внимательно моё сообщение. Там всё описано. Более того, вариант проверен и он работает. Но полностью код давать принципиально не хочу.
Кстати View все же создается долго.
Не дольше, чем любая таблица или хранимая процедура. Подругому н-е-б-ы-в-а-е-т. Медленно только выборка из вьюхи может работать.
Как получить нужный результат используя вложенные запросы.
а) переделай структуру таблиц
б) используй временные таблицы. Это точно будет не быстрее создания вьюхи, но быстрее при выборке. Bulk insert (select into)ускорит заполнение временной таблицы.
Добавлено: 15 ноя 2005, 09:48
Viktor Zull
OK. Все работает правильно. У меня в базе 1700 работников, а период времени максимально пол года. Это выполняется 4 минуты на компе с оперативо1 1G и процессором Pentium 4 2600MHz. Это нормально.
Добавлено: 15 ноя 2005, 10:25
Viktor Zull
Все же мне надо как-то запутить эту штуку через Deplhi, чтобы пользователь мог задать нужный период и получил на экране таблицу с результатами.
Добавлено: 15 ноя 2005, 10:51
Oscar
Прошу прощения у старших, что я опять влажу :roll:
AiK писал(а):Зачем?! Это серверный объект. Создал один раз, как таблицу, и забыл про него.
Viktor Zull, тебе нужно всего лишь
один раз создать этот самый VIEW. Загружаешь свой редактор БД, создаёшь, коммитиш (если в MSSQL такое есть).
Детальнее про это можно прочитать
тут
Далее тебе нужно на Делфи выполнить всего лишь один SELECT (описанный
AiKом тут: 13.11.05 20:57).
Если из Делфи не получается соединиться с БД и послать запрос - спроси в соседней ветке форума, как это делается.
Если же действительно Делфи говорит, что неправильный синтаксис запроса - покажи, пожалуйста, какое именно сообщение возвращается.
А как уж представить данные, полученные программой, это уже соовершенно другая история... (и опять же таки касается исключительно Делфи).