Текущий архив: 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