Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос суммы со многими параметрами [IB6.x, Firebird]


Страницы:   1 2

zor.g ©   (2005-11-09 10:14:00) 

Можно ли в одном запросе вернуть сумму по разным параметрам
Например:

X   Параметр
2   0
5   1
4   0
1   0

Нужно найти сумму Х где параметр=0 и где параметр=1 в
контексте одного запроса.

Спасибо


app   (2005-11-09 15:44:00) [1]

zor.g   (09.11.05 10:34) [5]
Вы наверно меня не поняли! Даже к начинающим перенесли :-(

Ну когда научишься правильно оформлять тему, сам вопрос, вот тогда можно будет и в другом форуме задавать вопросы, а ты пока еще начинающий, сложность же вопроса в данном случае роли не играет.


Sergey13   (2005-11-09 12:59:00) [2]

2[21] zor.g   (09.11.05 12:47)
И чем ЭТО лутше? Те-же яйца, только вид с боку. 8-)

А лучше всего тут будет обычный запрос типа

Select Параметр, sum(X)
From Table_name
Where client=:client
Group By Параметр

и подсовывание результатов отчетнику. С жестким количеством записей тут вообще делать нечего.


zor.g   (2005-11-09 12:47:00) [3]


create procedure p1
  returns(id, s, s1, s2, s3)
begin
 for select id from table
 group by id
 into :id
 do begin
    select sum(X) from table where id=:id
    into s;
    select sum(X) from table where p=1 and id=:id
    into s1;
    select sum(X) from table where p=2 and id=:id
    into s2;
    select sum(X) from table where p=3 and id=:id
    into s3;
    suspend;
 end
end


zor.g   (2005-11-09 12:43:00) [4]

create procedure p1
returns(id, s, s1, s2, s3)
begin
for select id from table
group by id
into :id
do begin
select sum(X) from table where id=:id
into s;
select sum(X) where p=1 from table where id=:id
into s1;
select sum(X) where p=2 from table where id=:id
into s2;
select sum(X) where p=3 from table where id=:id
into s3;
suspend;
end
end


Sergey13   (2005-11-09 12:39:00) [5]

2[18] zor.g   (09.11.05 12:37)
Пачиму? Как ты себе ее представляешь, что она будет лутше?


zor.g   (2005-11-09 12:37:00) [6]

я смотрю что тут ХП лутший выход


Sergey13   (2005-11-09 12:32:00) [7]

2[16] zor.g   (09.11.05 12:30)
>[13]-[14] работают не совсем корректно

А тебе рабочего кода и не давал никто. Тебе идею давали. К идее претензии есть? 8-)


zor.g   (2005-11-09 12:30:00) [8]

Кстати маленькая поправочка. [13]-[14] работают не совсем корректно. Нужно изменить на

select
   id_client,
   (select sum(x) from t where P=1 and id_client=:id_client) s1, //по сч1
   (select sum(x) from t where P=2 and id_client=:id_client) s2, //по сч2
   (select sum(x) from t where P=3 and id_client=:id_client) s3, по сч3
   
   (select sum(x) from t where id_client=:id_client) s     // всего, если счета в одной валюте :-)

from t
where id_client=:id_client

Специально создал тестовую таблицу и проверял. У меня Firebird 1.0.3


zor.g   (2005-11-09 11:26:00) [9]

Спасибо всем! Это я и искал [13]-[14]


myor   (2005-11-09 11:15:00) [10]

2 zor.g
см. [13]

select
    id_client,
    (select sum(x) from t where P=1) s1, //по сч1
    (select sum(x) from t where P=2) s2, //по сч2
    (select sum(x) from t where P=3) s3, по сч3
   
    sum(x)     // всего, если счета в одной валюте :-)

from t
where id_client=:id_client


Sergey13   (2005-11-09 11:05:00) [11]

если счетов всегда 3, то нечто вроде:

select id_client, (select sum(x) from t where P=1) s1, (select sum(x) from t where P=2) s2, (select sum(x) from t where P=3) s3
from t
where id_client=:id_client


zor.g   (2005-11-09 11:01:00) [12]

Скажем так есть клиенты. У каждого по 3 счета (значение фиксированое, счета 4 быть не может). На этих счетах есть деньги. Нужно сгенерировать отчет в виде: клиент, сума на 1 счете, сума на 2, сума на 3-м и всего в виде таблицы:

Клиент * счет1 * счет2 * счет3 * всего *

Все это в базе реализовано:

id_клиента, id_счета, деньги

Причем возможно что записи типа клиент2 счет3 вообще может и не быть в таблице БД. В таком случае надо вернуть ноль


Zacho   (2005-11-09 10:59:00) [13]

zor.g   (09.11.05 10:46) [9]
Я в Excel генерирую


Ну почитай справку по VBA и сделай. В чём проблемы-то :)


myor   (2005-11-09 10:54:00) [14]

а просто сумма не катит? т.е., есть ли вообще зависимость суммы от параметра? :-)
1. есть ли у "параметра" значения, отличные от "0" и "1"? "2", "3" и т.д.
2. нужна ли сумма только по "0" (по "1")?


zor.g   (2005-11-09 10:46:00) [15]

<Это можно и нужно реализовать средствами генератора отчётов.

Я в Excel генерирую


Zacho   (2005-11-09 10:44:00) [16]

zor.g   (09.11.05 10:34) [5]

Это можно и нужно реализовать средствами генератора отчётов.


zor.g   (2005-11-09 10:44:00) [17]

>В отчете можно и ручками повернуть полученный набор.
>Можно в ХП сразу такой сформировать.
>ИМХО первое предпочтительнее.

Ручками можно, но проблематично. А про ХП я думал. Наверное так и будет. :-) Думал есть варианты и попроще


Sergey13   (2005-11-09 10:39:00) [18]

>Вы наверно меня не поняли! Даже к начинающим перенесли :-(
Как спросил, так и поняли.

В отчете можно и ручками повернуть полученный набор.
Можно в ХП сразу такой сформировать.
ИМХО первое предпочтительнее.


zor.g   (2005-11-09 10:34:00) [19]

Вы наверно меня не поняли! Даже к начинающим перенесли :-(

select sum(X), параметр from table
group by параметр


не подходит

SQL должен вернуть одну строчку, типа sum1, sum2

Просто такой отчет нужен
----------------------
всего * а * б * с * д*
----------------------
10      *1 * 3 * 5 * 1 *
----------------------

где всего=а+б+с+д

Я думал можно ли это реализовать одним запросом


Sergey13   (2005-11-09 10:31:00) [20]

2[2] zor.g   (09.11.05 10:20)
А книжки почитать?
Мой совет в [1] неправильный (поторопился), правильный от АП
Select Параметр, sum(X)
From Table_name
Group By Параметр

Если значений параметра много а надо только 2, то
Select Параметр, sum(X)
From Table_name
where Параметр in (0,1)
Group By Параметр


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо