С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 3

Запрос к нескольким таблицам (есть SUM,COUNT)

27.10.2013, 22:42. Показов 3197. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть несколько таблиц, необходимо выбрать данные по заданию

Написал запрос:
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT DISTINCT
        r.DepID,
        D.RespSurname,
        D.RespName,
        D.RespMiddlename,
        COUNT (r.ReqID) OVER (PARTITION BY r.DepID) AS 'Общее количество заявок',
        SUM(P.Qty) OVER (PARTITION BY P.ReqID) AS 'Общее количество'
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'

Работает не так, как нужно.
Если не делать 2-ой JOIN, то COUNT выдает верное количество заявок. А если сделать, то он начинает считать все значения ReqID в таблице Publication_Request, хотя должен считать только в Request. Также нужно, чтобы количество считалось по кафедре один раз, а не выводилось разными строками.
Что нужно исправить в запросе, чтобы результат вывода был правильным?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2013, 22:42
Ответы с готовыми решениями:

Запрос по нескольким таблицам
Доброго времени суток. Имеется несколько замороченная схема данных. Ее фрагмент представлен ниже. Пишу запрос, который позволит мне...

Обьединение Count и Sum
Помогите пожалуйста! Не могу разобраться. Нужно создать запрос, чтобы из двух разных таблиц считать значения(имя и данные, к которым...

COUNT, по разным таблицам, по каждому ключу
Уже пару дней ломаю голову, как сделать. Начал изучать T-SQL, но пока не могу понять. Для биржевого робота вдруг понадобилась БД :) Простая...

3
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
27.10.2013, 23:24
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
select
 r.DepID,
 D.RespSurname,
 D.RespName,
 D.RespMiddlename,
 COUNT (*) AS 'Total Req',
 SUM(P.Qty) 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'
group by
 r.DepID,
 D.RespSurname,
 D.RespName,
 D.RespMiddlename;
1
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 3
28.10.2013, 00:01  [ТС]
Спасибо! В вашем варианте исправлена проблема с количеством(Qty), но TotalReq у DepID=12 выводит 4(их столько в Pubication_Request), а должно быть 2 (по таблице Request).
DepID RespSurname RespName RespMiddlename Total Req Total Qty
12 V Ivanov V 4 400
2 M Managov M 1 200
Я исправил еще кое-что и получилось так:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
 r.DepID,
 D.RespSurname,
 D.RespName,
 D.RespMiddlename,
 COUNT (*) OVER (PARTITION BY r.ReqID) AS 'Total Req',
 SUM(P.Qty) 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'
GROUP BY
 r.ReqID,
 r.DepID,
 D.RespSurname,
 D.RespName,
 D.RespMiddlename;
Выводит так:
DepID RespSurname RespName RespMiddlename Total Req Total Qty
12 V Ivanov V 1 300
12 V Ivanov V 1 100
2 M Managov M 1 200
Должно быть так:
DepID RespSurname RespName RespMiddlename Total Req Total Qty
12 V Ivanov V 2 400
2 M Managov M 1 200
Как объединить 1-ую и 2-ую строки? GROUP BY не помогает. Когда убирают PARTITION, то начинает считать записи в другой таблице.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
28.10.2013, 00:16
Не нужно злоупотреблять оконными функциями.
T-SQL
1
COUNT (DISTINCT r.ReqID)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2013, 00:16
Помогаю со студенческими работами здесь

Запрос к таблицам
Добрый день. Помогите сделать запрос. Уже кровь с глаз идет.. Никак не получается. Вот задание: Все что смог родить это: ...

Запрос к 4 таблицам
Народ, помогите, запутался полностью, есть 4 таблицы с полями Т1 – ID, Поле2.. ПолеN Т2 – ID, Т1_ID , Поле2.. ПолеN Т3 – Т2_ID, Т4_ID...

Запрос с count
Уважаемые друзья, помогите с запросом, есть основная таблица, к ней один ко многим связаны еще две таблицы, пытаюсь написать выборку что бы...

Запрос по двум таблицам
Здравствуйте, помогите пожалуйста составить запрос по двум таблицам, у них одинаковые (Id,name,number) и вычесть одинаковые name и...

Запрос к связанным таблицам
Здравствуйте! Есть таблица в каждой строке которой хранятся алармы (время, тип, состояние и т.д.), среди прочих колонок есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru