Главная страница
    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
7-28314
KPV-10k
2002-10-07 22:02
2002.12.09
Вырубить монитор


1-27927
Alex Ded
2002-11-28 21:39
2002.12.09
MDI Child in BPL


3-27839
alcat
2002-11-20 17:08
2002.12.09
Хочется в 20 раз быстрее......


1-28070
Vagrant
2002-11-27 01:58
2002.12.09
Runtime error 216


3-27865
Шурик Ш
2002-11-21 11:51
2002.12.09
Координаты ячейки DBGrid





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