Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > запрос с группировкой


Автор: malice_ 5.11.2007, 15:32
накладная:
id_invoice
id_production
amount
id_order



платежная ведомость:
id_paysheet
sum
id_order


продукция
id_production
name 
price


необходимо вывести список всех неоплаченных, либо оплаченных частично заказов.

т.е. id_invoice(id накладной), id_order (id заказа) и сумму долга



Код

SELECT id_invoice, id_order, (invoice.amount * production.price - paysheet.[sum]) AS dolg FROM invoice, paysheet, production
WHERE (
(invoice.id_order not in (select id_paysheet from paysheet)) or (invoice.id_order =paysheet.id_order)
)


 and  (invoice.amount * production.price > [sum] )

)

AND (invoice.id_production = production.id_production)

GROUP BY id_invoice, invoice.amount, production.price

заранее спасибо. 

Автор: Servena 5.11.2007, 20:41
Малис, по-моему тут не хватает одной таблицы, которая бы связывала между собой id_order в платежной ведомости и накладной. Или здесь составные ключи? Непонятно. Приведи, пожалуйста, что в этих таблицах ключи и какие и как эти ключи связаны
между собой (особенно интересуют внешние).
Без этого невозможно правильно объединить таблицы.

Автор: malice_ 7.11.2007, 08:24
Цитата(Servena @ 5.11.2007,  20:41)
Малис, по-моему тут не хватает одной таблицы, которая бы связывала между собой id_order в платежной ведомости и накладной. Или здесь составные ключи? Непонятно. Приведи, пожалуйста, что в этих таблицах ключи и какие и как эти ключи связаны
между собой (особенно интересуют внешние).
Без этого невозможно правильно объединить таблицы.

спасибо, разобралась) 
в таблице накладная сост. ключ (id_production, id_invoice), существует также таблица order (id_order, id_nakl).
по памяти:
Код

select * from
(select invoice.id_order as id_order, sum(production.price*invoice.amount) as sum1 from  invoice
inner join production on  invoice.id_production = production.id_production
group by invoice.id_order ) as p1
left join 
(select order.id_order as id_order, paysheet.sum as sum2 from order 
inner join paysheet on order.id_order =  paysheet.id_order
) as p2
on p1.id_order = p2.id_order
where sum1> sum2 or sum2 in null

Автор: Diasha 12.10.2009, 19:53
у меня тоже задача с группировкой, 

Фамилия,Имя,Отчество,Наименование_орг, Телефон_орг, Адрес_орг , Статистика_орг

Данные содержат статистику по работникам в организациях, надо выбрать общую статистику для организации


Наименование_орг     Телефон_орг      Адрес_орг      Статистика_орг(общая) Количество_работников


select наименование, sum(статистика), count(код) 
from таблица
where адрес  like '%город%'
group by Наименование
order by наименование


как выбрать остальные поля - адрес, телефон??? их группировать не надо!

помогите пжлст...заранее спасибо

Автор: Itsys 12.10.2009, 22:38
В результирующую таблицу можно вывести только группируемые поля и агрегатные функции.

Цитата(Diasha @  12.10.2009,  19:53 Найти цитируемый пост)
 их группировать не надо

А что мешает их сгруппировать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)