Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.019 c
1-1130929570
BobbyDigital
2005-11-02 14:06
2005.11.27
SaveDialog


4-1127596252
GuAV
2005-09-25 01:10
2005.11.27
EMF - изменение записей - как заполнить intercharacter spacing ?


3-1129522217
Vista
2005-10-17 08:10
2005.11.27
Люди добрые помогите....


6-1123800476
SPACE
2005-08-12 02:47
2005.11.27
Народ кто удачно работал с WinPcap функцией pcap_sendpacket ?


2-1131308159
ДимаДА
2005-11-06 23:15
2005.11.27
как с помощью АПИ узнать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский