![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос суммы со многими параметрами [IB6.x, Firebird]
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 Параметр