| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Как построить select
			 
			
			Есть задача: необходимо получить количество уникальных значений определённого поля в таблице. Тип поля - более менее произвольный (т.е. простой) Т.е. нужен аналог запроса: SELECT COUNT(DISTINCT Field) FROM Table. 
		
		
		
		
		
		
		
	Пример: Пусть таблица имеет поле Field. Таблица содержит записи Field 1 2 4 1 1 1 На выходе запроса: - 3 Хотелось бы сделать средствами AXAPTA (без использования подключения к серверу через класс Connection) и, конечно же, без использования while.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			вообще вопрос конечно простой с точки зрения классического SQL однако можно попробовать делать типа такого  select count(Field) from Table group by Field не факт что это будет работать по крайне мере даже не помню получалось ли у меня, хотя может надо бы поставить sp3
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			while select count(field) from table 
		
		
		
		
		
		
		
	group by field { print table.field; }  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Гость 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Изначально опубликовано mazzy  
while select count(field) from table group by field { print table.field; } НЕ РАБОТАЕТ!!! выдает значение field, а не count по группе(ам)!!! что делать, уваж MAZZY???  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А так? 
		
		
		
		
		
		
		
	PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не прошло и 2х лет с опубликования вопроса .. и найденого ответа. 
		
		
		
		
		
		
		
	простыми способами результат не получить, остается только извращаться PHP код: 
	
			
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: _scorp_ (5). | |
| 
			
			 | 
		#7 | 
| 
			
			 Гость 
		
			
	 | 
	
	
	
		
		
			
			
			Wamr, прокомментируй, пож
			 
			
			Это первый код. Дает 8 групп 
		
		
		
		
		
		
		
	LedgerTable lt, myTable1, myTable2; ; while select count(recid) from lt group by AccountPlType { print strfmt('%1 %2',lt.AccountPlType,lt.RecId); } Это второй (твой) код, дает число 126 LedgerTable lt, myTable1, myTable2; ; select count(RecId) from myTable1 notexists join myTable2 where myTable2.AccountPlType == myTable1.AccountPlType && myTable2.RecId > myTable1.RecId; info(int2str(myTable1.RecId)); Нужно было: получить число 8  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Проверьте RecId 
		
		
		
		
		
		
		
	Так как у меня получилось 5 = 5 ---------------- Добавлено на результат влияет значение параметра CacheLookup. Если оно отлично от EntireTable, то считается нормально  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Гость 
		
			
	 | 
	
	
	
		
		
			
			
			да уж
			 
			
			у меня - Entire Table.  
		
		
		
		
		
		
		
	Еще не проверил , будет ли работать, но -метод работающий нестабильно, довольно сложно применять. -Да и результат его работы внушает сомнение. -я, по наивности, думал, что кеширование влияет на скорость, а не результат...  
		 | 
| 
	
 |