Harry
Команда клуба
Offline
|
|
« : 31-03-2005 14:06 » |
|
Имеется: 2 таблицы People и Money связь по полю Sum как 1 ко многим (одному человеку принадлежит несколько выплат) Нужно: Посчитать сумму по полю Sum таблицы Money для конкретного человека. Запрос SELECT Sum(Money.Sum) FROM Money WHERE..... какое написать условие? Если задать условие WHERE Money.PeopleCode=People.PeopleCode все равно получится сумма по ВСЕМ записям, а не по текущей. А как правильно?
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Alf
Гость
|
|
« Ответ #1 : 31-03-2005 14:15 » |
|
Если мы хотим подсчитать все выплаты человека с кодом PeopleCode=N, то достаточно задать условие WHERE Money.PeopleCode=N, в данном примере вроде достаточно ограничиться одной таблицей Money.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #2 : 31-03-2005 15:26 » |
|
SELECT Sum(Money.Sum) FROM Money WHERE... group by PeopleCode
|
|
« Последнее редактирование: 31-03-2005 15:28 от Sla »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #3 : 01-04-2005 08:26 » |
|
Если мы хотим подсчитать все выплаты человека с кодом PeopleCode=N, то достаточно задать условие WHERE Money.PeopleCode=N, в данном примере вроде достаточно ограничиться одной таблицей Money.
Это если бы известен был конкретный код. Идея такая - мы листаем справочник People и заходя в карточку любого клиента видим сумму выплат именно по нему. Но как реализовать такой запрос, типа конструкции WHERE People.PeopleCode=Money.CurrentRecord.PeopleCode ? Ведь понятия текущей записи нет в запросах? Или есть?
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #4 : 01-04-2005 08:31 » |
|
SELECT Sum(Money.Sum) FROM Money WHERE... group by PeopleCode
Тогда я получу суммы ВСЕХ плательщиков, сгруппированные по коду. А мне нужен один, как бы фильтр по коду...
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Sla
|
|
« Ответ #5 : 01-04-2005 08:42 » |
|
Т.е. ты хочешь получить что-то типа: peopleCode1 Sum1 Sum2 Sum3 peopleCode2 Sum1 Sum2 Sum3 ?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #6 : 01-04-2005 08:47 » |
|
Если это так, то надо раскручивать курсор по PeopleCode выбираешь пиплов, а потом для каждого пипла выбираешь выплаты
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Alf
Гость
|
|
« Ответ #7 : 01-04-2005 08:48 » |
|
Это если бы известен был конкретный код. Идея такая - мы листаем справочник People и заходя в карточку любого клиента видим сумму выплат именно по нему. Но как реализовать такой запрос, типа конструкции WHERE People.PeopleCode=Money.CurrentRecord.PeopleCode ? А можно тогда поглядеть пример, как бы это должно было выглядеть? Что имеем на входе и что хотим получить в результате? Ведь понятия текущей записи нет в запросах? Или есть? Вообще-то реляционное счисление манипулирует отношениями целиком, не разделяя на отдельные кортежи. Но при желании можно работать с процедурной частью SQL, там есть понятие курсора, с помощью которого можно перебирать строки по одной. Однако это не совсем корректно, такие приемы нужно в самом крайнем случае использовать.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #8 : 01-04-2005 08:56 » |
|
Но здесь еще надо знать для каких целей это надо знать - только бумажная копию выборки - тогда это можно организовать форматированием запроса, - получить результат для дольнейшего преобразовния - как правильно заметил Alf - курсор
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Falsehood
Молодой специалист
Offline
Пол:
не может быть
|
|
« Ответ #9 : 01-04-2005 10:18 » |
|
попробовала в FoxPro 6.0 select PeopleCode, sum(Sum) from Money where Money.PeopleCode = People.PeopleCode into cursor Qqq
выбирается одна строчка с суммой выплат по тому человеку, на котором в данный момент стоит курсор в таблице People. или требуется что-то другое?
|
|
|
Записан
|
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #10 : 01-04-2005 13:36 » |
|
Расшифрую задачу. Есть организация, члены которой платят членские взносы. Список членов - в виде таблицы People. Взносы могут платиться нерегулярно, кем то больше, кем то меньше, кто-то их может совсем не заплатить. Т.е. хочется, идя курсором по табличке списка людей зайти в форму конкретного человека, в которой на одной из вкладок тоже есть табличка - именно ЕГО выплат. А отдельно - сумма этих выплат. Выплаты сделаны отдельной таблицей Money, подчиненной таблице People. Так вот, как раз реализовано все, кроме итоговой суммы выплат по человеку. P.S. Программа пишется в Delphi, но, думаю, корректней этот вопрос все же задавать в форуме БД Сами таблицы - Парадоксовские.
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Alf
Гость
|
|
« Ответ #11 : 01-04-2005 13:55 » |
|
Все же непонятно, в какой именно момент производится расчет взносов.
1. Заранее строится таблица вида "Человек - Сумма", и при проходе по списку людей оттуда берутся данные.
2. При переходе на строку с данными некоторого человека выполняется запрос, который подсчитывает только его платежи. Делается это каждый раз при переходе на новую строку.
Какой из вариантов лучше подходит?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #12 : 01-04-2005 13:56 » |
|
SELECT PeopleCode КодПипла from People WHERE все пиплы
SELECT Money.Sum FROM Money WHERE Money.PeopleCode= :КодПипла все взносы пипла
SELECT Sum(Money.Sum) FROM Money WHERE Money.PeopleCode= :КодПипла
Это и будет вся сумма по пиплу, КодПипла ты знаешь
В чем трудность?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #13 : 04-04-2005 07:19 » |
|
SELECT PeopleCode КодПипла from People WHERE все пиплы
SELECT Money.Sum FROM Money WHERE Money.PeopleCode= :КодПипла все взносы пипла
SELECT Sum(Money.Sum) FROM Money WHERE Money.PeopleCode= :КодПипла
Это и будет вся сумма по пиплу, КодПипла ты знаешь
В чем трудность?
Не знаю я код. Мне нужно выбрать взносы по текущему пиплу, в карточку которого я вошел. Т.е. привязать запрос к конкретному коду нельзя.
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #14 : 04-04-2005 07:21 » |
|
Все же непонятно, в какой именно момент производится расчет взносов.
1. Заранее строится таблица вида "Человек - Сумма", и при проходе по списку людей оттуда берутся данные.
2. При переходе на строку с данными некоторого человека выполняется запрос, который подсчитывает только его платежи. Делается это каждый раз при переходе на новую строку.
Какой из вариантов лучше подходит?
Первый вариант.
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Югг
Гость
|
|
« Ответ #15 : 04-04-2005 09:04 » |
|
А я бы в момент выбора человека (в этот момент ты уже знаешь его код) просто выполняла запрос SELECT Money.Sum FROM Money WHERE Money.PeopleCode= :КодПипла все взносы пипла
и все.
|
|
|
Записан
|
|
|
|
Alf
Гость
|
|
« Ответ #16 : 04-04-2005 09:20 » |
|
Первый вариант.
Тогда вполне корректно SELECT PeopleCode, SUM(Sum) FROM Money GROUP BY PeopleCode
Этот запрос вернет таблицу вида "КодПерсоны - СуммаПлатежей", которой можно впоследствии воспользоваться для отображения. Единственное замечание - называть столбцы таблицы именами встроенных функций и зарезервированными словами явно не лучшее решение (это я по поводу столбца Money.Sum). Лучше переименовать во что-то нейтральное типа Payment etc.
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #17 : 04-04-2005 09:46 » |
|
а если попробовать так, используюя такой запрос: SELECT People.* Vznosy.SummaVznosov FROM People INNER JOIN (SELECT PeopleCode, SUM(Money.Sum) AS [SummaVznosov] FROM Money GROUP BY PeopleCode) AS Vznosy ON Vznosy.PeopleCode = People.PeopleCode в парадоксе не силен, но INNER JOIN, вроде относится к стандарту SQL и должно все отработать
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #18 : 04-04-2005 11:06 » |
|
Тогда вполне корректно SELECT PeopleCode, SUM(Sum) FROM Money GROUP BY PeopleCode
Этот запрос вернет таблицу вида "КодПерсоны - СуммаПлатежей", которой можно впоследствии воспользоваться для отображения. Вот именно, таблицу. А нужно единственное значение для текущего человека. И если писать этот запрос для лейбы, на которую хочу вывести сумму - выводит сумму для первого человека в таблице, вне зависимости, в карточку которого человека зашел. HandKot: идею понял, но что-то не работает. Попытаюсь еще помучать код, не может быть, чтобы Парадокс не понимал вложенных запросов...
|
|
« Последнее редактирование: 04-04-2005 11:10 от Harry »
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Alf
Гость
|
|
« Ответ #19 : 04-04-2005 11:17 » |
|
Все же непонятно, в какой именно момент производится расчет взносов.
1. Заранее строится таблица вида "Человек - Сумма", и при проходе по списку людей оттуда берутся данные.
2. При переходе на строку с данными некоторого человека выполняется запрос, который подсчитывает только его платежи. Делается это каждый раз при переходе на новую строку.
Какой из вариантов лучше подходит?
Первый вариант. Тогда вполне корректно SELECT PeopleCode, SUM(Sum) FROM Money GROUP BY PeopleCode
Этот запрос вернет таблицу вида "КодПерсоны - СуммаПлатежей", которой можно впоследствии воспользоваться для отображения. Вот именно, таблицу. А нужно единственное значение для текущего пипла. Или я чего-то не понимаю, или... Из первого ответа явственно следует, что наилучшим образом подходит вариант с таблицей. Из второго - не менее явственно, что таблица никак не годится. На такую пару вопросов прямо затрудняюсь дать ответ. И сомневаюсь, что кто-нибудь справится.
|
|
|
Записан
|
|
|
|
Falsehood
Молодой специалист
Offline
Пол:
не может быть
|
|
« Ответ #20 : 04-04-2005 13:22 » |
|
Вот именно, таблицу. А нужно единственное значение для текущего человека. И если писать этот запрос для лейбы, на которую хочу вывести сумму - выводит сумму для первого человека в таблице, вне зависимости, в карточку которого человека зашел.
в условии where явно укажи псевдоним таблицы, из которой берется код человека для выбора взносов : select PeopleCode, sum(Sum) from Money where Money.PeopleCode = People.PeopleCode group by PeopleCode into cursor Qqq или предварительно запомни его в переменную : lcPeopleCodу = People.PeopleCode select PeopleCode, sum(Sum) from Money where Money.PeopleCode = lcPeopleCode group by PeopleCode into cursor Qqq
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #21 : 04-04-2005 14:14 » |
|
в условии where явно укажи псевдоним таблицы, из которой берется код человека для выбора взносов : select PeopleCode, sum(Sum) from Money where Money.PeopleCode = People.PeopleCode group by PeopleCode into cursor Qqq этот запрос работать не будет А запомнить код пипла я уже предлагал SELECT PeopleCode КодПипла from People WHERE ...
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Falsehood
Молодой специалист
Offline
Пол:
не может быть
|
|
« Ответ #22 : 04-04-2005 15:35 » |
|
Sla, почему не будет работать? в FoxPro 6.0 работает, а в Парадоксе не сработет?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #23 : 04-04-2005 15:49 » |
|
потому что fox это не SQL, в Парадоксе может и сработает Oracle? MsSql? MySql? работать не будет
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #24 : 05-04-2005 05:22 » |
|
Harry может тебе подойдет такой вариант (хотя мож он и проскакивал уже в теме) SELECT People.*, (SELECT SUM(Sum) FROM Money WHERE Money.PeopleCode = People.PeopleCode) AS [Взносы] FROM People
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #25 : 05-04-2005 06:38 » |
|
Или я чего-то не понимаю, или...
Из первого ответа явственно следует, что наилучшим образом подходит вариант с таблицей. Из второго - не менее явственно, что таблица никак не годится. На такую пару вопросов прямо затрудняюсь дать ответ. И сомневаюсь, что кто-нибудь справится.
Наверное, я некорректно сформулировал задачу. Имелось в виду, что при выборе в таблице людей конкретного человека мы переходим в форму. В форме лежит таблица взносов уже по этому, конкретному человеку. И сумма по нему же. Вот сумма-то и не получается...
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Sla
|
|
« Ответ #26 : 05-04-2005 06:43 » |
|
В форме лежит таблица взносов уже по этому, конкретному человеку. И сумма по нему же. Вот сумма-то и не получается... чтобы получить таблицу взносов конкретного пипла, тебе нужно знать код этого пипла, а зная код ты получишь сумму. или я чего-то не понимаю
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #27 : 05-04-2005 07:38 » |
|
Да, но код я и не знаю. Я ведь не могу знать, какого пипла я буду выбирать. Так что код жестко привязывать не могу. Вариантов, похоже, тут два. Один - повесить на кнопку входа в форму запрос на получение кода, второй - последний вариант, который предложил HandKot. В той вариации, что он написал, запрос дает ПЕРВУЮ запись. Но уже по конкретному пиплу. Истина где-то рядом, сижу, ищу...
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Sla
|
|
« Ответ #28 : 05-04-2005 07:45 » |
|
Погодь! У тебя две формы. Первая - это пиплы Вторая - это взносы конкретного пипла. Как эти две формы связаны друг с другом? запрос HandKot даст суммы взносов каждого пипла
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Alf
Гость
|
|
« Ответ #29 : 05-04-2005 08:09 » |
|
Наверное, я некорректно сформулировал задачу. Имелось в виду, что при выборе в таблице людей конкретного человека мы переходим в форму. В форме лежит таблица взносов уже по этому, конкретному человеку. И сумма по нему же. Вот сумма-то и не получается... Мне кажется, я догадываюсь о причине нашего взаимного непонимания. Похоже, ты рассматриваешь SQL-запрос как что-то неизменное во время выполнения программы, подобно процедуре. Поэтому, не зная заранее код выбранной персоны, невозможно подготовить соответствующий запрос во время написания программы. Здесь возможны два решения. Первое - динамически формировать строку запроса SQL во время выполнения программы, поскольку это - всего лишь текстовая строка, и она не компилируется с программой, а интерпретируется сервером баз данных непосредственно во время выполнения. Так, если код текущей персоны CurrPersonId, то формируется строка вида: strSQL = "SELECT SUM(Sum) FROM Money WHERE (PersonId = " + CurrPersonId.ToString() + ")"
а потом этот запрос выполняется. Второе решение - использовать параметризованный запрос, который ведет себя подобно процедуре с формальными параметрами. Тогда во время выполнения запроса нужно сообщить значение его фактического аргумента. В статьях по ADO.NET я приводил пример, как это сделать на данной платформе. На других платформах есть аналогичные средства.
|
|
|
Записан
|
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #30 : 05-04-2005 08:26 » |
|
ОРГАНИЗАЦИЯ БД: две таблицы - People и Vznosi. Связь по полю PeopleCode как один ко многим (один человек-много выплат) ИНТЕРФЕЙС: основная форма - представлена в виде таблицы пиплов, переходим на любого, клацаем кнопку Форма, заходим в форму конкретного пипла. В этой форме таблица выплат этого конкретного пипла и общая сумма по пиплу. Запрос в виде, который дал HandKot приводит к ошибке, говорит, что нет поля Sum(Summa). Неясно, глюк это парадокса или просто нужно писать по другому. По идее, высчитываемое поле должно отображаться в списке полей....
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #31 : 05-04-2005 08:46 » |
|
SELECT People.*, (SELECT Sum(Vznosi."Summa") FROM "Vznosi.DB" Vznosi WHERE Vznosi."PeopleCode"=People."PeopleCode") FROM "People.DB" People
Вот этот запрос. Он выдает ошибку, говорит не найдено поле Sum(Summa). Действительно, в выпадающем списке доступных полей его нет. Т.е. второй Select не выполняется.
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #32 : 05-04-2005 09:55 » |
|
Harry, вылож на форум структуры таблиц, всеж легче будет
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #33 : 06-04-2005 05:54 » |
|
тут появилась еще одна идея - использовать св-во Filter объекта Recordset, либо объекта таблица
(делфи не знаю, пишу на басике)
На главной форме : dim rsPeople as ADODB.Recordset
rsPeople.Open "SELECT * FROM People", connection set dbgrdPeople.DataSource = rsPeople ' присваиваем таблице источник строк BoundColumn = rs!PeopleCode
На форме взносов: dim rsVznosy as ADODB.Recordset dim rsTotalVznosy as ADODB.Recordset
rsVznosy.Open "SELECT * FROM Vznosy", connection rsTotalVznosy.Open "SELECT PeopleCode, SUM(Summa) AS [TotalSum] FROM Vznosy GROUP BY PeopleCode" set dbgrdVznosy = rsVznosy set txtTotal.Text = rsTotalVznosy!TotalSum
при открытий формы взносов устанавливаем фильтр sub frmVznosyLoad() rsVznosy.Filter = "PeopleCode = " & frmPeople.dbgrdPeople.BoundColumn rsTotalVznosy.Filter = "PeopleCode = " & frmPeople.dbgrdPeople.BoundColumn end sub
в Дельфи может отличатся, но идею вроде нормально объяснил
|
|
« Последнее редактирование: 20-12-2007 19:04 от Алексей1153++ »
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #34 : 06-04-2005 08:17 » |
|
Структура - см. выше. Главная таблица - пиплы, подчиненная - выплаты, связанная с главной по коду пипла. Что касается идеи - попробую сваять что-либо подобное, если по другому не получится. Просто странно, что такую простую проблему не получается решить обычным запросом. Ну не может же в Делфях INNER JOIN не работать..... что-то я пишу неправильно. Я тут уже ссылку дал, на форуме по Delphi, может чего подскажут....
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Sla
|
|
« Ответ #35 : 06-04-2005 09:30 » |
|
Ну не может же в Делфях INNER JOIN не работать..... что-то я пишу неправильно.
а причем здесь inner join и дельфи, не путай праведное с грешным и где в твоей задаче нужен inner join?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #36 : 06-04-2005 10:23 » |
|
а причем здесь inner join и дельфи, не путай праведное с грешным и где в твоей задаче нужен inner join?
Да ладно, не придирайся Понятно, что имеется в виду организация данных в Парадокс. А INNER JOIN я использовал бы для подзапросов. Увы, как я только что вычитал в мануале, в Local SQL (Парадокс в частности) вложенные подзапросы не поддерживает....
|
|
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
Sla
|
|
« Ответ #37 : 06-04-2005 10:36 » |
|
а разве так нельзя? SELECT People.PeopleCode, Sum(Vznosi."Summa") FROM "Vznosi.DB" Vznos, "People.DB" People WHERE Vznosi."PeopleCode"=People."PeopleCode" Group by People.PeopleCode
в принципе это и есть inner join
|
|
« Последнее редактирование: 06-04-2005 10:38 от Sla »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #38 : 06-04-2005 11:55 » |
|
Sla согласен, но в данном запросе не будет доп.информации по пиплам, а она может нужна, либо надо в GROUP BY добавлять и остальные поля, которые нужно выбрать
|
|
« Последнее редактирование: 06-04-2005 11:58 от HandKot »
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Sla
|
|
« Ответ #39 : 06-04-2005 12:03 » |
|
да конечно, но код приведен как пример
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #40 : 06-04-2005 12:03 » |
|
Harry в таком случае остается сразу выбрать все данные (пиплы, выплаты) в рекордсеты, настроить таблицы с источниками на эти рекордсеты и, к примеру, на событие "Изменение строки" таблицы "пиплов" устанавливать фильтр на рекордсете "выплат" (осталось узнать, если такое св-во в рекордсете в дельфи)
(у меня был такой проект для синхронного отображения данных в двух таблицах)
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Harry
Команда клуба
Offline
|
|
« Ответ #41 : 08-04-2005 07:05 » |
|
Harry в таком случае остается сразу выбрать все данные (пиплы, выплаты) в рекордсеты, настроить таблицы с источниками на эти рекордсеты и, к примеру, на событие "Изменение строки" таблицы "пиплов" устанавливать фильтр на рекордсете "выплат" (осталось узнать, если такое св-во в рекордсете в дельфи)
(у меня был такой проект для синхронного отображения данных в двух таблицах)
Так и придется делать. Я соорудил следующий запрос: SELECT People."PeopleCode", (Sum(Vznosi."Summa")) AS Total FROM "People.DB" People, "Vznosi.DB" Vznosi WHERE Vznosi."PeopleCode"=People."PeopleCode" GROUP BY People."PeopleCode" ORDER BY Total
Но он выбирает сумму по текущей записи, теперь придется учесть перемещение курсора по записям, чтобы динамически менялись суммы.
|
|
« Последнее редактирование: 08-04-2005 07:08 от Harry »
|
Записан
|
Слабый пол силен в силу слабости сильного пола к слабому
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #42 : 08-04-2005 11:04 » |
|
Harry, я имелл ввиду следующее: главная форма rsP = "select * from people"
это источник строк грида
подчиненная форма (или грид) rsV = "select peoplecode, sum(Summa) from Vznozy group by peoplecode" rsV.Filter = "PeopleCode = " & rsP!PeopleCode источник строк для грида
на событие смены строки в гриде sub грид_People_RowChange() rsV.Filter = "PeopleCode = " & rsP!PeopleCode end sub
примерно так
PS: хотя не мне учить, разработчик сам решает как лучше сделать
|
|
« Последнее редактирование: 08-04-2005 11:18 от HandKot »
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
|