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

Вниз

Помогите составить запрос   Найти похожие ветки 

 
Шурик Ш   (2002-11-20 11:55) [0]

Не могу сообразить как составить запрос... Подскажите, пожалуйста!
Есть несколько колонок, по которым происходит группировка. Необходимо при этой группировке получить в одной строке запроса сумму по другой колонке с одним уловием и по той же колонке с другим условием.
Например, группировка по контрагенту и договору, сумма оплат при выставленнои признаке "Наличный расчет" и отдельно сумма оплат при отключенном признаке.
Как это записать на SQL?


 
Шурик Ш   (2002-11-20 12:01) [1]

Sos me!


 
Шурик Ш   (2002-11-20 12:06) [2]

Ай-Яй-Яй! Очень надо!


 
dimis   (2002-11-20 12:15) [3]

нужно:
какая субд
структура таблицы


 
Шурик Ш   (2002-11-20 12:17) [4]

Я через БДЕ работаю с SQL 7.0 а таблица 4 поля: Контрагент, Договор, Сумма, Признак наличной оплаты.
Выходной датасет: Контрагент, Договор, НалСумма, БезНалСумма.


 
Wolf226   (2002-11-20 12:18) [5]

Может типа этого:

select name,
(select sum(summa) from docs where id_client=c.id and nal=1) as nalplat,
(select sum(summa) from docs where id_client=c.id) as totlalplat
from client c


 
Шурик Ш   (2002-11-20 12:20) [6]

А группировка по контр и дог?


 
Wolf226   (2002-11-20 12:25) [7]

Пока писал не видел структуры.
Тогда типа так.

select distinct id_client, dogovor
(select sum(summa) from docs where id_client=c.id_client and nal=1) as nalplat,
(select sum(summa) from docs where id_client=c.id_client and nal=0) as beznalplat
from docs c


 
Андрей Прокофьев   (2002-11-20 12:26) [8]

SELECT SUM(SUMMA) AS SumTotal,
SUM(SUMMA * CASE NAL WHEN 1 THEN 1 ELSE 0 END) AS SumCash
FROM Table
GROUP BY Contract, Dogovor

если NAL - это числовое поле и значения 1 для наличных, 0 для безналичных и других значений нет и не будет (?!) тогда

SELECT SUM(SUMMA) AS SumTotal,
SUM(SUMMA * NAL) AS SumCash
FROM Table
GROUP BY Contract, Dogovor


 
dimis   (2002-11-20 12:30) [9]

не знаю будет ли работать в SQL 7
но в оракле так
select контрагент,договор,sum(case when Признак=1 then Сумма else 0),sum(case when Признак=0 then Сумма else 0)
from Таблица
group by контрАгент,договор

если не покатит зам напиши функцию которая возващает Сумму или 0 в зависимости от флага
не знаю точно как в SQL,но передалать не составит труда
function Case(Priznak Number,In_priznak Number,Summa Number)return number
is
begin
if Priznak=in_priznak
then Return Summa
else Return 0
end if
end

Запрос
select контрагент,договор,sum(case(Признак,1,Сумма),sum(case(Признак,0,Сумма)
from Таблица
group by контрАгент,договор


 
dimis   (2002-11-20 12:33) [10]

самый грамотный 2-й вариант Андрея Прокофьева
ЗЫ ну или мой :)


 
Андрей Прокофьев   (2002-11-20 12:38) [11]

Вот так проще (вариант 1)
SELECT Contract, Dogovor,
SUM(Summa) AS SummaTotal,
SUM(case Nal when 1 then Summa else 0 end) AS SummaCash
FROM Table
GROUP BY Contract, Dogovor




 
Шурик Ш   (2002-11-20 12:48) [12]

Спасибо всем! Действительно самый грамотный (и быстроработающий) - вариант "Андрей Прокофьев © (20.11.02 12:38)". Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2002.12.09;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.007 c
3-27899
Avsam
2002-11-19 18:56
2002.12.09
Ошибка Oracle ORA-00604 и ORA-01000


14-28221
Nikolas Shmus
2002-11-16 13:42
2002.12.09
Noterdam de Paris


1-28087
Dr. Web
2002-11-28 11:20
2002.12.09
исходники компонентов Dream Scripter и Dream controls для Delphi6


1-28117
mila
2002-11-28 16:09
2002.12.09
стоит ли апгрейдить?


1-28085
BThorn
2002-11-28 09:48
2002.12.09
Как создать указатель не на сам TEdit, а на его свойство Text?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский