| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Пожалуйста, помогите с запросом
			 
			
			Ситуация такая. Есть некоторая таблица JournalRequest, в которой есть поле UserCode. 
		
		
		
		
		
		
		
	Данные в таблице простые: для UserCode = '0001' одна запись, для '0002' - две и для '0003' - три. Хотелось бы сделать запрос (с помощью Query или через АОТ), который бы выдавал количество записей для каждого UserCode, типа: 0001 1 0002 2 0003 3 Пытаюсь так: PHP код: 
	
			
	PHP код: 
	
			
	0001 2 0002 3 0003 Видимо, где-то косяк при соединении таблиц. Не могу понять где  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Проще надо быть  
		
		
		
		
		
		
		
	![]() PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я дал упрощенный вариант. Мне бы хотелось джойнить с таблицами, и в подчиненных таблицах задавать разные условия. 
		
		
		
		
		
		
		
	PHP код: 
	
			
	![]() Ну и соответственно чтобы выдавалось что-то типа 0001 1 4 7 0002 2 5 8 0003 3 6 9 Попытался поджойнить с первой таблицей, сразу же не получилось ![]() А с помощью того варианта, который Вы предложили, так не получится  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Есть такой язык для описания запросов, придуман фирмой IBM, называется SQL. Выразите на нем человеческими словами, что Вы хотите получить от запроса, и Вам сразу будет легче!  
		
		
		
		
		
		
		
	![]() Уважаемый chel! Это ни в коем разе не "наезд", а хороший совет - когда я (или пользователь) не могу (может) точно сформулировать, что он хочет получить, надо сначала надо точно сформулировать (можно сначала просто по-русски) критерии выбора, потом переложить на SQL, потом выполнить данный запрос (в джобе или обозревателе таблиц, если простой) и только потом прекладывать на Query, который, увы, не всесилен... А чем Вам не угодил select? Попробуйте сначала написать запрос с его помощью. И покажите нам - так легче будет разобраться.... С Уважением, Георгий.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сомневаюсь, что это возможно. 
		
		
		
		
		
		
		
	Может стоит поискать другие пути решения исходной задачи?  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Уважаемый Георгий! Я давно уже привык выражать свои мысли в первую очередь на этом замечательном языке  
		
		
		
		
		
		
		
	  Вот только перевести свои мысли в не менее замечательный Query у меня почему-то не получается ![]() PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А насчет того, чем мне не угодил select: 
		
		
		
		
		
		
		
	1. Раз уж мне дается визуальный инструмент (Query), который на первый взгляд достаточно удобен, надо в нем разобраться и пользоваться им. 2. В Query (то есть в QueryRun) мне очень понравился метод prompt. Можно самому формы не городить.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спешу Вас разочаровать - вряд ли получиться. 1) Где-то на форуме проходила информация, что торйной query "не жилец" - очень медленно выполняется. Точно не помню, но какие-то траблы были. 2) с Group by тоже проблемы... используется order by   
		
		
		
		
		
		
		
	  3) Даже если что-то подобное и удасться сделать, то уж очень все громоздко будет. Можно сделать так: содать query (простой, только с теми параметрами, которые влияют на запрос), -> queryrun -> запустить -> prompt -> получить все параметры, которые ввел пользователь, и на основании их уже комбинировать простые selectы или query.С наилучшими пожеланиями, Георгий.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Георгий, спасибо
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано George Nordic  
Спешу Вас разочаровать - вряд ли получиться. 1) Где-то на форуме проходила информация, что торйной query "не жилец" - очень медленно выполняется. Точно не помню, но какие-то траблы были. 2) с Group by тоже проблемы... используется order by   3) Даже если что-то подобное и удасться сделать, то уж очень все громоздко будет. Можно сделать так: содать query (простой, только с теми параметрами, которые влияют на запрос), -> queryrun -> запустить -> prompt -> получить все параметры, которые ввел пользователь, и на основании их уже комбинировать простые selectы или query.С наилучшими пожеланиями, Георгий.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Хм. Как нет? есть же таблица (несколько таблиц) связанных по какому-либо принципу. Или одна, но на ней есть display методы, по которым она выбирает даннык в другой. На ей основе и делаете грид.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В особо сложных случаях, когда нужна форма с хитрой выборкой - выручают временные таблицы. Которые и лежат под гридом. 
		
		
		
		
		
		
		
	А если данные надо в Ексель, так может их сразу туда? Без форм и пр..  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Честно говоря, не рекомендовал бы злоупотреблять темповыми таблицами. Только в случае очень тяжелых запросов по многим таблицам, расчетных полей или суммирования (группировки полей для суммирования из разных таблиц). Легкость использования темповых таблиц перерастает в привычку использовать их по любому поводу, так что не удивляйтесь, если скоро в репозитарии у Вас будет несколько сотен таблиц с префиксом tmp  
		
		
		
		
		
		
		
	![]() display - методы удобны, кэшируются и для этого и придуманы.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано George Nordic  
Хм. Как нет? есть же таблица (несколько таблиц) связанных по какому-либо принципу. Или одна, но на ней есть display методы, по которым она выбирает даннык в другой. На ей основе и делаете грид. Цитата: 
	
		
			Изначально опубликовано AlGol  
В особо сложных случаях, когда нужна форма с хитрой выборкой - выручают временные таблицы. Которые и лежат под гридом.  
		 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			techsupportjournalrequest - ведь все данные стояться на основании запроса именно к этой таблице?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано George Nordic  
techsupportjournalrequest - ведь все данные стояться на основании запроса именно к этой таблице? ![]() Ведь несколько строк исходной таблицы сворачиваются в одну строку, полученную в результате запроса.  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			То, что данная таблица находиться в датасорсе, не означает что будут выведены все записи из неё  
		
		
		
		
		
		
		
	![]() Переопределите её query... Перекройте executeQuery, наконец! Много разных вариантов...  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано George Nordic  
То, что данная таблица находиться в датасорсе, не означает что будут выведены все записи из неё ![]() Переопределите её query... Перекройте executeQuery, наконец! Много разных вариантов... ![]() Я бы рад перекрыть executeQuery, но мой запрос не представляется в виде query. Видимо, придется обойтись временной таблицей. Очень большое спасибо за помощь.  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, думаю, что в Вашем случае это может быть оправдано. 
		
		
		
		
		
		
		
	Удачи! С Уважением, Георгий.  | 
| 
	
 | 
| 
			
			 | 
		#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 | |||
		
  |