![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите составить запрос [D6]
Шурик Ш © (2002-11-20 11:55:00)Не могу сообразить как составить запрос... Подскажите, пожалуйста!
Есть несколько колонок, по которым происходит группировка. Необходимо при этой группировке получить в одной строке запроса сумму по другой колонке с одним уловием и по той же колонке с другим условием.
Например, группировка по контрагенту и договору, сумма оплат при выставленнои признаке "Наличный расчет" и отдельно сумма оплат при отключенном признаке.
Как это записать на SQL?
Шурик Ш (2002-11-20 12:48:00) [1]Спасибо всем! Действительно самый грамотный (и быстроработающий) - вариант "Андрей Прокофьев © (20.11.02 12:38)". Спасибо!
Андрей Прокофьев (2002-11-20 12:38:00) [2]Вот так проще (вариант 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
dimis (2002-11-20 12:33:00) [3]самый грамотный 2-й вариант Андрея Прокофьева
ЗЫ ну или мой :)
dimis (2002-11-20 12:30:00) [4]не знаю будет ли работать в 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 контрАгент,договор
Андрей Прокофьев (2002-11-20 12:26:00) [5]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
Wolf226 (2002-11-20 12:25:00) [6]Пока писал не видел структуры.
Тогда типа так.
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:20:00) [7]А группировка по контр и дог?
Wolf226 (2002-11-20 12:18:00) [8]Может типа этого:
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:17:00) [9]Я через БДЕ работаю с SQL 7.0 а таблица 4 поля: Контрагент, Договор, Сумма, Признак наличной оплаты.
Выходной датасет: Контрагент, Договор, НалСумма, БезНалСумма.
dimis (2002-11-20 12:15:00) [10]нужно:
какая субд
структура таблицы
Шурик Ш (2002-11-20 12:06:00) [11]Ай-Яй-Яй! Очень надо!
Шурик Ш (2002-11-20 12:01:00) [12]Sos me!