Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите составить запрос [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!


Наверх

Титульная страница Поиск, карта сайта Написать письмо