Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 улучшение запроса  [new]
NovichekStudent
Member

Откуда: Архангельск
Сообщений: 11
Всем привет.
Есть 2 таблицы Данные платежей(атрибуты-idcontract,amount, внешний ключ-iddoctype(fk)) и тип документа(атрибут iddoctype)
Нужно вывести id contract и сумму платежей по каждому типу документа(агрегация по контракту)
Я делаю так
select idcontract,sum(Amount) from table1 t1, table2 t2
where iddoctype=1
and t1.iddoctype=t2.iddoctype
group by idcontract
inner join on idcontract
select idcontract,sum(Amount) from table1 t1, table2 t2
where iddoctype=2
and t1.iddoctype=t2.iddoctype
group by idcontract
inner join on idcontract
select idcontract,sum(Amount) from table1 t1, table2 t2
where iddoctype=3
and t1.iddoctype=t2.iddoctype
group by idcontract
И так далее Можно как нибудь сделать проще?
Просто к примеру мне нужны будут данные из других таблиц( Например время, или период), то придется много гемороиться. Спасибо
1 окт 13, 10:06    [14904979]     Ответить | Цитировать Сообщить модератору
 Re: улучшение запроса  [new]
саша_ювелир
Guest
NovichekStudent,

может я тебя неправильно понял, но по моему так:

declare @plateg table (idcontract int , amount int , iddoctype int)
declare @typedoc table (iddoctype int)


SELECT p.idcontract, t.iddoctype, sum(amount) FROM
@plateg as p
LEFT JOIN @typedoc as t
on p.iddoctype = t.iddoctype
group by p.idcontract, t.iddoctype
1 окт 13, 10:14    [14905015]     Ответить | Цитировать Сообщить модератору
 Re: улучшение запроса  [new]
NovichekStudent
Member

Откуда: Архангельск
Сообщений: 11
саша_ювелир,
спасибо, выглядит логично(так как суммы агрегируются по контракту и по типу типу документа), но как быть если я хочу присвоить название каждому столбцу) Например сумма поставки, сумма заказа, сумма оплаты и так далее
1 окт 13, 10:20    [14905043]     Ответить | Цитировать Сообщить модератору
 Re: улучшение запроса  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
Данные платежей(атрибуты-idcontract,amount, внешний ключ-iddoctype(fk))
а если без джойна?, фк же есть уже в первой таблице
1 окт 13, 10:20    [14905045]     Ответить | Цитировать Сообщить модератору
 Re: улучшение запроса  [new]
саша_ювелир
Guest
AnyKey45, только в том случае, если таблица типов документа является просто справочником, а не отображает наличие документов в реальности.
1 окт 13, 10:24    [14905066]     Ответить | Цитировать Сообщить модератору
 Re: улучшение запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
NovichekStudent
но как быть если я хочу присвоить название каждому столбцу) Например сумма поставки, сумма заказа, сумма оплаты и так далее

Взять и присвоить не пробовали ?
1 окт 13, 10:27    [14905082]     Ответить | Цитировать Сообщить модератору
 Re: улучшение запроса  [new]
NovichekStudent
Member

Откуда: Архангельск
Сообщений: 11
саша_ювелир,
А можете ответить на мой вопрос?
1 окт 13, 10:27    [14905083]     Ответить | Цитировать Сообщить модератору
 Re: улучшение запроса  [new]
саша_ювелир
Guest
NovichekStudent, тогда, мне кажется, лучше добавить условие CASE. Т.е. case when iddoctype = 1 then 'платежи x'
when iddoctype = 2 then 'платежи y'. а вообще лучше б в таблице с типом документа хранить название этого типа и выводить его вместе с айдишником
1 окт 13, 10:28    [14905089]     Ответить | Цитировать Сообщить модератору
 Re: улучшение запроса  [new]
NovichekStudent
Member

Откуда: Архангельск
Сообщений: 11
саша_ювелир,
Спасибо, разобрался
1 окт 13, 10:40    [14905174]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить