Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

Запрос суммы со многими параметрами   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.025 c
1-1130837427
kyn66
2005-11-01 12:30
2005.11.27
Анимация виснет во время процесса.


11-1112073636
DmiSb
2005-03-29 09:20
2005.11.27
Как положить панель на нужную страницу TabConrol`a


14-1131014329
Отладчик
2005-11-03 13:38
2005.11.27
Программное обнаружения модема после загрузки


2-1131455124
Asail
2005-11-08 16:05
2005.11.27
Простой и убийство приложения ...


2-1131278703
AlexLines
2005-11-06 15:05
2005.11.27
как добавить символ в позицию курсора