|  26.02.2006, 09:59 | #1 | 
| Участник |  Можно делать join таблицы к себе же через Query? 
			
			Можно делать join таблицы к себе же через Query? Если да, то киньте в меня примером пожалуйста.
		 
				__________________ Все люди равны, но некоторые равнее... | 
|  | 
|  26.02.2006, 10:21 | #2 | 
| Модератор | 
			
			Хм. Можно, разумеется. Делаешь 2 переменные - типа одной таблицы. А дальше - как обычно  С Уважением, Георгий | 
|  | 
|  26.02.2006, 10:37 | #3 | 
| Модератор | Что-то в этом роде... Код:     Query                           query = new Query();
    QueryRun                        qr;
    QueryBuildDataSource            qbds;
    QueryBuildRange                 qbr;
    TableId                         tableId;
    FieldId                         fieldId;
    FieldId                         parentFieldId;
    SalesLine                       salesLine;
    ;
    tableId = tablenum(SalesLine);
    qbds = query.AddDataSource(tableId);
    
    qbds = qbds.AddDataSource(tableId);
    parentFieldId   = fieldnum(SalesLine, SalesId);
    fieldId         = fieldnum(SalesLine, SalesId);
    qbds.addLink(parentFieldId, fieldId);
    //qbds.joinMode(JoinMode::NoExistsJoin);
    //info(qbds.toString());
    info(query.dataSourceNo(1).toString()); | 
|  | |
| За это сообщение автора поблагодарили: sah (1). | |
|  27.02.2006, 09:02 | #4 | 
| Участник | Цитата: 
		
			Сообщение от George Nordic
			
			 Код:     Query                           query = new Query();
    QueryRun                        qr;
    QueryBuildDataSource            qbds;
    QueryBuildRange                 qbr;
    TableId                         tableId;
    FieldId                         fieldId;
    FieldId                         parentFieldId;
    SalesLine                       salesLine;
    ;
    tableId = tablenum(SalesLine);
    qbds = query.AddDataSource(tableId);
    
    qbds = qbds.AddDataSource(tableId);
    parentFieldId   = fieldnum(SalesLine, SalesId);
    fieldId         = fieldnum(SalesLine, SalesId);
    qbds.addLink(parentFieldId, fieldId);
    //qbds.joinMode(JoinMode::NoExistsJoin);
    //info(qbds.toString());
    info(query.dataSourceNo(1).toString()); ? 
				__________________ Все люди равны, но некоторые равнее... | 
|  | 
|  27.02.2006, 09:35 | #5 | 
| Модератор | 
			
			Нет, а что? Он же для примера просто - с идеологической точки зрения он не имеет никакого смысла. Просто скажите какая именно задача - какие таблицы хотя бы. Не понял - там же есть инфо, которое показывает заждойненную саму к себе таблицу. Или что-то другое требовалось? Этот код рабочий - там просто была другая (новая, не родная) таблица, которую я заменил на стандартную. С Уважением, Георгий | 
|  | 
|  27.02.2006, 10:14 | #6 | 
| Модератор | Цитата: 
		
			Сообщение от korvin
			
			 Можно делать join таблицы к себе же через Query? PHP код: 
			  | 
|  | 
|  27.02.2006, 11:49 | #7 | 
| Участник | Цитата: 
		
			Сообщение от George Nordic
			
			 PHP код: 
			 Table1 wp0; Table1 wp1; /* в таблице Table1 поля int WareId; int StorageId; int PartyId; real AmountMod; real CostMod; */ select * from wp0 group by StorageId, WareId, PartyId join sum(AmountMod), sum(CostMod) from wp1 where (wp0.StorageId == xxx || wp0.StorageId == yyy) && (wp0.WareId == zzz || wp0.WareId == aaa) && wp1.StorageId == wp0.StorageId && wp1.WareId == wp0.WareId ; Я получаю те данные которые мне нужны в задаче. Как этот запрос сделать через Query, для того чтобы иметь изменяемое количество условий отбора? 
				__________________ Все люди равны, но некоторые равнее... | 
|  | 
|  27.02.2006, 12:05 | #8 | 
| Модератор | 
			
			Хм. Честно говоря: 1) Лень возится. Честно. Может кто-то другой добъет пример через квери. 2) Непросто, потому как группировки и суммы 3) Мой вам совет - сделайте отдельно функцию, которая возвращает небходимую сумму по Table1. Эта функция может принимать параметры или запрос, и выполняться на серваке. Это здорово упростит задачу и Вас порадует быстродействие. Очень рекомендую именно этот способ. С Уважением, Георгий | 
|  | 
|  27.02.2006, 13:15 | #9 | 
| NavAx | 
			
			Что типа этого. PHP код: 
			 | 
|  | |
| За это сообщение автора поблагодарили: korvin (1). | |
|  02.03.2006, 10:46 | #10 | 
| Участник | Цитата: 
		
			Сообщение от raz
			
			 Что типа этого. PHP код: 
			  
				__________________ Все люди равны, но некоторые равнее... | 
|  | 
|  02.03.2006, 10:57 | #11 | 
| Участник | 
			
			Придётся видимо делать через XppCompiler, если никто не предложит лучшего...
		 
				__________________ Все люди равны, но некоторые равнее... | 
|  | 
|  02.03.2006, 11:15 | #12 | 
| Developer | Цитата: 
		
			Сообщение от korvin
			
			 Придётся видимо делать через XppCompiler, если никто не предложит лучшего...  Разве что значения xxx, yyy, zzz и aaa лучше прогонять через SysQuery::value что бы спец. символы не мешали. Цитата: 
		
			Сообщение от korvin
			
			 Проверил, не совсем то, вернее совсем не то получается, что в задаче   | 
|  | 
|  02.03.2006, 11:32 | #13 | 
| NavAx | Цитата: 
		
			Сообщение от korvin
			
			 Проверил, не совсем то, вернее совсем не то получается, что в задаче   Свиду вроде все нормально. info вот что выдает: SELECT * FROM Table1 GROUP BY Table1.StorageId ASC, Table1.WareId ASC, Table1.PartyId ASC WHERE ((StorageId = 000 OR StorageId = 001)) AND ((WareId = 002 OR WareId = 003)) JOIN SUM(AmountMod), SUM(CostMod) FROM Table1 WHERE Table1.StorageId = Table1.StorageId AND Table1.WareId = Table1.WareId Планы запросов только скобками отличаются: SELECT A.STORAGEID,A.WAREID,A.PARTYID,SUM(B.AMOUNTMOD),SUM(B.COSTMOD) FROM TABLE1 A,TABLE1 B WHERE ((A.DATAAREAID='DAT') AND (((A.STORAGEID='000') OR (A.STORAGEID='001')) AND ((A.WAREID='002') OR (A.WAREID='003')))) AND ((B.DATAAREAID='DAT') AND ((A.STORAGEID=B.STORAGEID) AND (A.WAREID=B.WAREID))) GROUP BY A.STORAGEID,A.WAREID,A.PARTYID ORDER BY A.STORAGEID,A.WAREID,A.PARTYID OPTION(FAST 22) SELECT A.STORAGEID,A.WAREID,A.PARTYID,SUM(B.AMOUNTMOD),SUM(B.COSTMOD) FROM TABLE1 A,TABLE1 B WHERE (A.DATAAREAID='DAT') AND ((B.DATAAREAID='DAT') AND (((((A.STORAGEID='000') OR (A.STORAGEID='001')) AND ((A.WAREID='002') OR (A.WAREID='003'))) AND (B.STORAGEID=A.STORAGEID)) AND (B.WAREID=A.WAREID))) GROUP BY A.STORAGEID,A.WAREID,A.PARTYID ORDER BY A.STORAGEID,A.WAREID,A.PARTYID OPTION(FAST 22) PHP код: 
			Последний раз редактировалось raz; 02.03.2006 в 11:38. | 
|  | 
|  02.03.2006, 11:51 | #14 | 
| Участник | Цитата: 
		
			Сообщение от raz
			
			 А что не то? Свиду вроде все нормально. info вот что выдает: SELECT * FROM Table1 GROUP BY Table1.StorageId ASC, Table1.WareId ASC, Table1.PartyId ASC WHERE ((StorageId = 000 OR StorageId = 001)) AND ((WareId = 002 OR WareId = 003)) JOIN SUM(AmountMod), SUM(CostMod) FROM Table1 WHERE Table1.StorageId = Table1.StorageId AND Table1.WareId = Table1.WareId Планы запросов только скобками отличаются: SELECT A.STORAGEID,A.WAREID,A.PARTYID,SUM(B.AMOUNTMOD),SUM(B.COSTMOD) FROM TABLE1 A,TABLE1 B WHERE ((A.DATAAREAID='DAT') AND (((A.STORAGEID='000') OR (A.STORAGEID='001')) AND ((A.WAREID='002') OR (A.WAREID='003')))) AND ((B.DATAAREAID='DAT') AND ((A.STORAGEID=B.STORAGEID) AND (A.WAREID=B.WAREID))) GROUP BY A.STORAGEID,A.WAREID,A.PARTYID ORDER BY A.STORAGEID,A.WAREID,A.PARTYID OPTION(FAST 22) SELECT A.STORAGEID,A.WAREID,A.PARTYID,SUM(B.AMOUNTMOD),SUM(B.COSTMOD) FROM TABLE1 A,TABLE1 B WHERE (A.DATAAREAID='DAT') AND ((B.DATAAREAID='DAT') AND (((((A.STORAGEID='000') OR (A.STORAGEID='001')) AND ((A.WAREID='002') OR (A.WAREID='003'))) AND (B.STORAGEID=A.STORAGEID)) AND (B.WAREID=A.WAREID))) GROUP BY A.STORAGEID,A.WAREID,A.PARTYID ORDER BY A.STORAGEID,A.WAREID,A.PARTYID OPTION(FAST 22) PHP код: 
			Беру на вооружение. Жаль только что уже сделал через XppCompiler, переработал лишнего...   
				__________________ Все люди равны, но некоторые равнее... | 
|  |