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, если никто не предложит лучшего...
Цитата:
Сообщение от 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, переработал лишнего...
__________________
Все люди равны, но некоторые равнее... |
|