Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизЗапрос суммы со многими параметрами Найти похожие ветки
← →
zor.g (2005-11-09 10:14) [0]Можно ли в одном запросе вернуть сумму по разным параметрам
Например:X Параметр
2 0
5 1
4 0
1 0
Нужно найти сумму Х где параметр=0 и где параметр=1 в
контексте одного запроса.
Спасибо
← →
Sergey13 © (2005-11-09 10:18) [1]Через Union - самое простое ИМХО.
← →
zor.g (2005-11-09 10:20) [2]А примерчик?
← →
Anatoly Podgoretsky © (2005-11-09 10:22) [3]Group By
← →
Sergey13 © (2005-11-09 10:31) [4]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 Параметр
← →
zor.g (2005-11-09 10:34) [5]Вы наверно меня не поняли! Даже к начинающим перенесли :-(
select sum(X), параметр from table
group by параметр
не подходит
SQL должен вернуть одну строчку, типаsum1, sum2
Просто такой отчет нужен
----------------------
всего * а * б * с * д*
----------------------
10 *1 * 3 * 5 * 1 *
----------------------
где всего=а+б+с+д
Я думал можно ли это реализовать одним запросом
← →
Sergey13 © (2005-11-09 10:39) [6]>Вы наверно меня не поняли! Даже к начинающим перенесли :-(
Как спросил, так и поняли.
В отчете можно и ручками повернуть полученный набор.
Можно в ХП сразу такой сформировать.
ИМХО первое предпочтительнее.
← →
zor.g (2005-11-09 10:44) [7]>В отчете можно и ручками повернуть полученный набор.
>Можно в ХП сразу такой сформировать.
>ИМХО первое предпочтительнее.
Ручками можно, но проблематично. А про ХП я думал. Наверное так и будет. :-) Думал есть варианты и попроще
← →
Zacho © (2005-11-09 10:44) [8]zor.g (09.11.05 10:34) [5]
Это можно и нужно реализовать средствами генератора отчётов.
← →
zor.g (2005-11-09 10:46) [9]<Это можно и нужно реализовать средствами генератора отчётов.
Я в Excel генерирую
← →
myor © (2005-11-09 10:54) [10]а просто сумма не катит? т.е., есть ли вообще зависимость суммы от параметра? :-)
1. есть ли у "параметра" значения, отличные от "0" и "1"? "2", "3" и т.д.
2. нужна ли сумма только по "0" (по "1")?
← →
Zacho © (2005-11-09 10:59) [11]zor.g (09.11.05 10:46) [9]
Я в Excel генерирую
Ну почитай справку по VBA и сделай. В чём проблемы-то :)
← →
zor.g (2005-11-09 11:01) [12]Скажем так есть клиенты. У каждого по 3 счета (значение фиксированое, счета 4 быть не может). На этих счетах есть деньги. Нужно сгенерировать отчет в виде: клиент, сума на 1 счете, сума на 2, сума на 3-м и всего в виде таблицы:
Клиент * счет1 * счет2 * счет3 * всего *
Все это в базе реализовано:
id_клиента, id_счета, деньги
Причем возможно что записи типа клиент2 счет3 вообще может и не быть в таблице БД. В таком случае надо вернуть ноль
← →
Sergey13 © (2005-11-09 11:05) [13]если счетов всегда 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
← →
myor © (2005-11-09 11:15) [14]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
← →
zor.g (2005-11-09 11:26) [15]Спасибо всем! Это я и искал [13]-[14]
← →
zor.g (2005-11-09 12:30) [16]Кстати маленькая поправочка. [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
← →
Sergey13 © (2005-11-09 12:32) [17]2[16] zor.g (09.11.05 12:30)
>[13]-[14] работают не совсем корректно
А тебе рабочего кода и не давал никто. Тебе идею давали. К идее претензии есть? 8-)
← →
zor.g (2005-11-09 12:37) [18]я смотрю что тут ХП лутший выход
← →
Sergey13 © (2005-11-09 12:39) [19]2[18] zor.g (09.11.05 12:37)
Пачиму? Как ты себе ее представляешь, что она будет лутше?
← →
zor.g (2005-11-09 12:43) [20]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
← →
zor.g (2005-11-09 12:47) [21]
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
← →
Sergey13 © (2005-11-09 12:59) [22]2[21] zor.g (09.11.05 12:47)
И чем ЭТО лутше? Те-же яйца, только вид с боку. 8-)
А лучше всего тут будет обычный запрос типаSelect Параметр, sum(X)
From Table_name
Where client=:client
Group By Параметр
и подсовывание результатов отчетнику. С жестким количеством записей тут вообще делать нечего.
← →
app © (2005-11-09 15:44) [23]zor.g (09.11.05 10:34) [5]
Вы наверно меня не поняли! Даже к начинающим перенесли :-(
Ну когда научишься правильно оформлять тему, сам вопрос, вот тогда можно будет и в другом форуме задавать вопросы, а ты пока еще начинающий, сложность же вопроса в данном случае роли не играет.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.014 c