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

Откуда:
Сообщений: 1
Имеются следующие таблицы:
Department(Кафедра)
DepIDDepNameSpecIDSpecialityHeadNameHeadSurnameHeadMiddleNameRespNameRespSurnameRespMiddleName
1Department of Business1BusinessmanStepanSSStepanovSS
2Department of Managment2ManageManagovMMManagovMM
12Comp.systems2201ComputersIvanovVVIvanovVV

Request(Заявка)
ReqIDDepIDDateOfReg
1122013-01-01 00:00:00
2122013-12-12 00:00:00
312012-01-01 00:00:00
412012-01-01 00:00:00
522013-12-12 00:00:00

Publication_Request(Связующая таблица между Publication и Request)Для данного запроса Publication не нужна, ее не размещаю.
PublIDReqIDQty
11100
21100
31100
32100
43200
44100
55200

Необходимо выполнить следующий запрос:
Получить информацию обо всех заявках сделанных кафедрами за текущий год.
№ кафедрыОтветственныйобщ.кол-во заявокОбщ.кол-во заказанных изданий

Есть запрос, но работает не совсем как неоходимо:
SELECT DISTINCT
		r.DepID,
		D.RespSurname,
		D.RespName,
		D.RespMiddlename,
		COUNT (r.ReqID) OVER (PARTITION BY r.DepID) AS 'Total Req',
		SUM(P.Qty) OVER (PARTITION BY P.ReqID) AS 'Total Qty'
FROM [NewDB].[dbo].[Request] AS r 
JOIN [NewDB].[dbo].[Department] AS D
ON r.DepID=D.DepID
JOIN [NewDB].[dbo].[Publication_Request] AS P
ON r.ReqID=P.ReqID 
WHERE DateOfReg  >= '01.01.2013 00:00:00' AND DateOfReg < '01.01.2014 00:00:00'

Выводится следующее:
DepIDRespSurnameRespNameRespMiddlenameTotal ReqTotal Qty
2MManagovM1200
12VIvanovV4100
12VIvanovV4300

Должно быть так:
DepIDRespSurnameRespNameRespMiddlenameTotal ReqTotal Qty
2MManagovM1200
12VIvanovV2400

Если не делать 2-ой JOIN, то COUNT выдает верное количество заявок. А если сделать, то он начинает считать все значения ReqID в таблице Publication_Request, хотя должен считать только в Request. Также нужно, чтобы количество считалось по кафедре один раз, а не выводилось разными строками.
Знающие товарищи, подскажите, пожалуйста, что нужно исправить в запросе?
27 окт 13, 21:01    [15038470]     Ответить | Цитировать Сообщить модератору
 Re: Использование функций COUNT,SUM в запросе к нескольким таблицам  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
nVision,

Group by добавить, от over() избавиться.

Ну и count(distinct r.ReqId) считать.
28 окт 13, 02:22    [15039279]     Ответить | Цитировать Сообщить модератору
 Re: Использование функций COUNT,SUM в запросе к нескольким таблицам  [new]
Добрый Э - Эх
Guest
Ennor Tiegael
Ну и count(distinct r.ReqId) считать.
Или научится использовать предагрегированные деривед-тейблы с последующим их джойном к основной таблице.
28 окт 13, 05:03    [15039331]     Ответить | Цитировать Сообщить модератору
 Re: Использование функций COUNT,SUM в запросе к нескольким таблицам  [new]
IldarZ75
Member

Откуда:
Сообщений: 4
Для исходного варианта запроса, попробуйте так SUM(P.Qty) OVER (PARTITION BY P.ReqID) AS 'Total Qty' => SUM(P.Qty) OVER (PARTITION BY r.DepID) AS 'Total Qty'.
28 окт 13, 09:22    [15039589]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить