08.07.2004, 08:16 | #1 |
Участник
|
Пожалуйста, помогите с запросом
Ситуация такая. Есть некоторая таблица JournalRequest, в которой есть поле UserCode.
Данные в таблице простые: для UserCode = '0001' одна запись, для '0002' - две и для '0003' - три. Хотелось бы сделать запрос (с помощью Query или через АОТ), который бы выдавал количество записей для каждого UserCode, типа: 0001 1 0002 2 0003 3 Пытаюсь так: PHP код:
PHP код:
0001 2 0002 3 0003 Видимо, где-то косяк при соединении таблиц. Не могу понять где |
|
08.07.2004, 08:51 | #2 |
----------------
|
Проще надо быть
PHP код:
|
|
08.07.2004, 09:03 | #3 |
Участник
|
Я дал упрощенный вариант. Мне бы хотелось джойнить с таблицами, и в подчиненных таблицах задавать разные условия.
PHP код:
Ну и соответственно чтобы выдавалось что-то типа 0001 1 4 7 0002 2 5 8 0003 3 6 9 Попытался поджойнить с первой таблицей, сразу же не получилось А с помощью того варианта, который Вы предложили, так не получится |
|
08.07.2004, 09:53 | #4 |
Модератор
|
Есть такой язык для описания запросов, придуман фирмой IBM, называется SQL. Выразите на нем человеческими словами, что Вы хотите получить от запроса, и Вам сразу будет легче!
Уважаемый chel! Это ни в коем разе не "наезд", а хороший совет - когда я (или пользователь) не могу (может) точно сформулировать, что он хочет получить, надо сначала надо точно сформулировать (можно сначала просто по-русски) критерии выбора, потом переложить на SQL, потом выполнить данный запрос (в джобе или обозревателе таблиц, если простой) и только потом прекладывать на Query, который, увы, не всесилен... А чем Вам не угодил select? Попробуйте сначала написать запрос с его помощью. И покажите нам - так легче будет разобраться.... С Уважением, Георгий. |
|
08.07.2004, 09:57 | #5 |
----------------
|
Сомневаюсь, что это возможно.
Может стоит поискать другие пути решения исходной задачи? |
|
08.07.2004, 10:27 | #6 |
Участник
|
Уважаемый Георгий! Я давно уже привык выражать свои мысли в первую очередь на этом замечательном языке Вот только перевести свои мысли в не менее замечательный Query у меня почему-то не получается
PHP код:
|
|
08.07.2004, 10:33 | #7 |
Участник
|
А насчет того, чем мне не угодил select:
1. Раз уж мне дается визуальный инструмент (Query), который на первый взгляд достаточно удобен, надо в нем разобраться и пользоваться им. 2. В Query (то есть в QueryRun) мне очень понравился метод prompt. Можно самому формы не городить. |
|
08.07.2004, 10:49 | #8 |
Модератор
|
Спешу Вас разочаровать - вряд ли получиться. 1) Где-то на форуме проходила информация, что торйной query "не жилец" - очень медленно выполняется. Точно не помню, но какие-то траблы были. 2) с Group by тоже проблемы... используется order by 3) Даже если что-то подобное и удасться сделать, то уж очень все громоздко будет. Можно сделать так: содать query (простой, только с теми параметрами, которые влияют на запрос), -> queryrun -> запустить -> prompt -> получить все параметры, которые ввел пользователь, и на основании их уже комбинировать простые selectы или query.
С наилучшими пожеланиями, Георгий. |
|
08.07.2004, 11:20 | #9 |
Участник
|
Георгий, спасибо
|
|
08.07.2004, 15:10 | #10 |
Участник
|
Цитата:
Изначально опубликовано George Nordic
Спешу Вас разочаровать - вряд ли получиться. 1) Где-то на форуме проходила информация, что торйной query "не жилец" - очень медленно выполняется. Точно не помню, но какие-то траблы были. 2) с Group by тоже проблемы... используется order by 3) Даже если что-то подобное и удасться сделать, то уж очень все громоздко будет. Можно сделать так: содать query (простой, только с теми параметрами, которые влияют на запрос), -> queryrun -> запустить -> prompt -> получить все параметры, которые ввел пользователь, и на основании их уже комбинировать простые selectы или query. С наилучшими пожеланиями, Георгий. |
|
08.07.2004, 15:28 | #11 |
Модератор
|
Хм. Как нет? есть же таблица (несколько таблиц) связанных по какому-либо принципу. Или одна, но на ней есть display методы, по которым она выбирает даннык в другой. На ей основе и делаете грид.
|
|
08.07.2004, 15:37 | #12 |
Участник
|
В особо сложных случаях, когда нужна форма с хитрой выборкой - выручают временные таблицы. Которые и лежат под гридом.
А если данные надо в Ексель, так может их сразу туда? Без форм и пр.. |
|
08.07.2004, 15:58 | #13 |
Модератор
|
Честно говоря, не рекомендовал бы злоупотреблять темповыми таблицами. Только в случае очень тяжелых запросов по многим таблицам, расчетных полей или суммирования (группировки полей для суммирования из разных таблиц). Легкость использования темповых таблиц перерастает в привычку использовать их по любому поводу, так что не удивляйтесь, если скоро в репозитарии у Вас будет несколько сотен таблиц с префиксом tmp
display - методы удобны, кэшируются и для этого и придуманы. |
|
08.07.2004, 16:00 | #14 |
Участник
|
Цитата:
Изначально опубликовано George Nordic
Хм. Как нет? есть же таблица (несколько таблиц) связанных по какому-либо принципу. Или одна, но на ней есть display методы, по которым она выбирает даннык в другой. На ей основе и делаете грид. Цитата:
Изначально опубликовано AlGol
В особо сложных случаях, когда нужна форма с хитрой выборкой - выручают временные таблицы. Которые и лежат под гридом. |
|
08.07.2004, 16:04 | #15 |
Модератор
|
techsupportjournalrequest - ведь все данные стояться на основании запроса именно к этой таблице?
|
|
08.07.2004, 16:21 | #16 |
Участник
|
Цитата:
Изначально опубликовано George Nordic
techsupportjournalrequest - ведь все данные стояться на основании запроса именно к этой таблице? Ведь несколько строк исходной таблицы сворачиваются в одну строку, полученную в результате запроса. |
|
08.07.2004, 16:55 | #17 |
Модератор
|
То, что данная таблица находиться в датасорсе, не означает что будут выведены все записи из неё
Переопределите её query... Перекройте executeQuery, наконец! Много разных вариантов... |
|
08.07.2004, 17:39 | #18 |
Участник
|
Цитата:
Изначально опубликовано George Nordic
То, что данная таблица находиться в датасорсе, не означает что будут выведены все записи из неё Переопределите её query... Перекройте executeQuery, наконец! Много разных вариантов... Я бы рад перекрыть executeQuery, но мой запрос не представляется в виде query. Видимо, придется обойтись временной таблицей. Очень большое спасибо за помощь. |
|
08.07.2004, 17:40 | #19 |
Модератор
|
Да, думаю, что в Вашем случае это может быть оправдано.
Удачи! С Уважением, Георгий. |
|
12.07.2004, 11:53 | #20 |
Участник
|
На сколько я понял из кода, вы пытаетесь соеденить UserCode и сумма(UserCode),
причем указываете, что они должны совпадать : ....... qbd.addSelectionField(fieldNum(JournalRequest,UserCode)); ...... qbd2.addSelectionField(fieldNum(JournalRequest,UserCode),SelectionField::Count); qbd2.addLink(fieldNum(JournalRequest,UserCode), fieldNum(JournalRequest,UserCode)); Связывать нужно по UserCode, а вычислять количество строк по recid, в этом случае код будет выглядеть так: qbd = query.addDataSource(tableNum(JournalRequest)); qbd.OrderMode(OrderMode::GroupBy); qbd.addSortField(fieldNum(JournalRequest,UserCode)); qbd.addSelectionField(fieldNum(JournalRequest,UserCode)); qbd2 = qbd.addDataSource(tableNum(JournalRequest)); qbd2.OrderMode(OrderMode::GroupBy); qbd2.addSortField(fieldNum(JournalRequest,UserCode)); // zev ---- > // qbd2.addSelectionField(fieldNum(JournalRequest,UserCode),SelectionField::Count); qbd2.addSelectionField(fieldNum(JournalRequest,UserCode)); qbd2.addSelectionField(fieldNum(JournalRequest, RecId), SelectionField::COUNT); // <--- zev qbd2.addLink(fieldNum(JournalRequest,UserCode), fieldNum(JournalRequest,UserCode)); qbd2.joinMode(JoinMode::InnerJoin); |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Помогите с запросом к полю-контейнеру. | 3 | |||
Помогите с запросом.. | 2 | |||
Помогите с SQL запросом | 8 | |||
Помогите пожалуйста с запросом... | 18 | |||
Помогите пожалуйста! | 16 |
|