11.10.2007, 18:18 | #1 |
Участник
|
Не могу построить простейший запрос
В обычном SQL это выглядело бы так:
select count(DISTINCT AccountNum) from custTrans where AmountCur > 1000 Перевожу на русский - посчитать количество клиентов, сумма проводки по которым больше 1000. как это сделать с помощью Query? |
|
11.10.2007, 18:22 | #2 |
Участник
|
X++: count(custTable.recID) exists join custTrans.... |
|
11.10.2007, 18:33 | #3 |
Участник
|
Ну это не Query как я вижу
|
|
11.10.2007, 18:41 | #4 |
Участник
|
X++: QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(CustTable)) .count(fieldNum(CustTable, recID)) .exists(tableNum(CustTrans)) .matches(fieldNum(CustTrans, AmountCur), '>100') .run(); |
|
11.10.2007, 18:58 | #5 |
Участник
|
Если именно сумма больше, то через запросы в аксапте вы этого пока сделать не можете (это необходим having sum(amountCur) > 1000
X++: while select sum(AmountCur) from custTrans group by AccountNum { if (custTrans.amountCur > 1000) info(custTrans.accountNum) } |
|
12.10.2007, 07:44 | #6 |
Участник
|
сумма проводки а не проводок
|
|
12.10.2007, 12:58 | #7 |
Участник
|
|
|
12.10.2007, 13:05 | #8 |
Участник
|
приблуда для людей замученных кверибилддатасурсами
|
|
|
За это сообщение автора поблагодарили: Russland (1). |
12.10.2007, 13:50 | #9 |
MCTS
|
Цитата:
приблуда для людей замученных кверибилддатасурсами
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
12.10.2007, 14:00 | #10 |
Участник
|
А Маззи говорит что это все фигня и надо визуально делать.
|
|
12.10.2007, 14:06 | #11 |
MCTS
|
Дело в том, что истина посредине.
Просто не надо злоупотреблять ни тем, ни другим подходом.
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
12.10.2007, 14:33 | #12 |
Участник
|
а мне жутко не нравятся аотные квери прежде всего тем, что взглядом не определишь, что там настроено. Надо ковыряться, разворачивать и смотреть свойства.
|
|
12.10.2007, 14:39 | #13 |
MCTS
|
Цитата:
не нравятся аотные квери прежде всего тем, что взглядом не определишь, что там настроено. Надо ковыряться, разворачивать и смотреть свойства
Зато когда строится стандартный отчёт, квери в АОТ сами просятся.
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
12.10.2007, 15:17 | #14 |
Участник
|
Цитата:
Сообщение от belugin
приблуда для людей замученных кверибилддатасурсами
|
|
12.10.2007, 15:19 | #15 |
Участник
|
мне четно говоря влом расшифровывать. Общая идея понятна?
|
|
12.10.2007, 16:25 | #16 |
Участник
|
Идея непонятна
Цитата:
QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(CustTable))
.count(fieldNum(CustTable, recID)) .exists(tableNum(CustTrans)) .matches(fieldNum(CustTrans, AmountCur), '>100') .run();} если поставить .count(fieldNum(CustTable, AccountNum)) возвращает 0. |
|
12.10.2007, 16:33 | #17 |
Участник
|
Забыл link
X++: QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(CustTable)) .count(fieldNum(CustTable, recID)) .exists(tableNum(CustTrans)) .link(fieldNum(CustTable, AccountNum), fieldNum(CustTrans, AccountNum)) .matches(fieldNum(CustTrans, AmountCur), '>100') X++: SELECT COUNT(A.RECID) FROM CUSTTABLE A WHERE (A.DATAAREAID='dat') AND EXISTS (SELECT 'x' FROM CUSTTRANS B WHERE ((B.DATAAREAID='dat') AND ((B.AMOUNTCUR>1.E2) AND (A.ACCOUNTNUM=B.ACCOUNTNUM)))) OPTION(FAST 5) |
|
|
За это сообщение автора поблагодарили: Prof (2). |
12.10.2007, 23:37 | #18 |
Участник
|
Цитата:
Тогда годится что-то типа такого кода: X++: select count(RecId) from CustTable exists join CustTrans where CustTrans.AccountNum == CustTable.AccountNum && CustTrans.AmountMST > 1000; Последний раз редактировалось Михаил Андреев; 12.10.2007 в 23:39. |
|