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

Объединить 2 запроса в 1

29.10.2013, 17:39. Показов 1277. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Проблема вот в чем: есть 2 запроса, по отдельности работают, а вместе или не работают совсем или работают некорректно.
Необходимо одним запросом получить следующую информацию:
|Издание|Кол-во в библиотеке|Кол-во принятых изданий|Кол-во списанных изданий|

Скрипты создания таблиц, участвующих в запросе:
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE Publication(
    PublID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    BookTitle nvarchar(50) UNIQUE NOT NULL,
    YearOfPubl NUMERIC(4, 0) NOT NULL,
    NumberOfPages INT NOT NULL,
    Annotation ntext NULL,
    Qty INT NULL, 
);
CREATE TABLE AktSpisania_Publication(
    AktSpisID INT NOT NULL FOREIGN KEY REFERENCES AktSpisania(AktSpisID),
    PublID INT NOT NULL FOREIGN KEY REFERENCES Publication(PublID),
    PRIMARY KEY (AktSpisID, PublID),
    Qty NUMERIC(3, 0) NOT NULL
);
 
CREATE TABLE AktPriema_Publication(
    AktPrID INT NOT NULL FOREIGN KEY REFERENCES AktPriema(AktPrID),
    PublID INT NOT NULL FOREIGN KEY REFERENCES Publication(PublID),
    PRIMARY KEY (AktPrID, PublID),
    Qty NUMERIC(3, 0) NOT NULL
);
В Publication BookTitle - название, Qty - количество, которое есть в библиотеке.
В AktSpisania_Publication - PublID - для связи с Publicaton, AktSpisID для связи с таблицей AktSpisania, Qty - списанное количество.
AktPriema_Publication похожа на AktSpisania_Publication, только Qty тут обозначает кол-во принятых изданий.

Подсчет списанных или принятых изданий отдельно производится корректно
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT
 P.BookTitle,
 P.Qty,
 SUM(Sp.Qty) AS 'Количество списанных'
FROM [NewDB].[dbo].[Publication] AS P 
JOIN [NewDB].[dbo].[AktSpisania_Publication] AS Sp
ON P.PublID=Sp.PublID 
GROUP BY
 P.PublID,
 P.BookTitle,
 P.Qty

Совместный подсчет приводит к тому, что количество списанных и принятых изданий умножается на 2, если одно издание были приняты\списаны по разным заявкам(по одной все ок).
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
 P.BookTitle,
 P.Qty,
 ISNULL(SUM (Pr.Qty),0) AS 'Количество принятых',
 ISNULL(SUM(Sp.Qty),0) AS 'Количество списанных'
FROM [NewDB].[dbo].[Publication] AS P 
JOIN [NewDB].[dbo].[AktPriema_Publication] AS Pr
ON P.PublID=Pr.PublID
LEFT JOIN [NewDB].[dbo].[AktSpisania_Publication] AS Sp
ON P.PublID=Sp.PublID 
GROUP BY
 P.PublID,
 P.BookTitle,
 P.Qty;

Думаю, что это из-за JOINов, пробывал с подзапросом, но тогда вообще последний столбец не цепляется.
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT 
 P.BookTitle,
 P.Qty,
 SUM (Pr.Qty) AS 'Количество принятых'
FROM [NewDB].[dbo].[Publication] AS P 
JOIN [NewDB].[dbo].[AktPriema_Publication] AS Pr
ON P.PublID=Pr.PublID
LEFT JOIN (
SELECT
 P1.BookTitle,
 P1.Qty,
ISNULL(SUM(Sp.Qty),0) AS 'Количество списанных'
FROM [NewDB].[dbo].[Publication] AS P1 
JOIN [NewDB].[dbo].[AktSpisania_Publication] AS Sp
ON P1.PublID=Sp.PublID 
GROUP BY
 P1.BookTitle,
 P1.Qty) s
 ON P.BookTitle=s.BookTitle  
 
GROUP BY
 P.BookTitle,
 P.Qty;

Как правильно совместить 2 отдельно работающих запроса в один?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.10.2013, 17:39
Ответы с готовыми решениями:

Объединить два запроса
dm.UchetQuery.Close(); dm.UchetQuery.sql.Clear; dm.UchetQuery.SQL.Add('insert into учет(номенклатура)'); ...

Объединить два запроса в функцию
Надо объединить эти три запроса в одной функции, которая бы обновляла запись в поле nbalance: SELECT n.vnumber, t.vname,...

Объединить 3 запроса в одну таблицу
здравствуйте . подскажите пожалуйста. как объединить 3 запроса.1 и 3 запрос выдаёт 3 столбиков.2 запрос выдаёт 18 столбиков. ...

1
119 / 111 / 47
Регистрация: 09.07.2013
Сообщений: 209
29.10.2013, 21:00
T-SQL
1
2
3
4
5
6
7
8
9
10
SELECT
 P.BookTitle,
 P.Qty,
 q1.sumqty AS 'Количество списанных',
 q2.sumqty AS 'Количество принятых',
FROM [NewDB].[dbo].[Publication] AS P 
CROSS APPLY 
(SELECT  ISNULL(SUM(Qty),0) sumQty FROM [NewDB].[dbo].[AktSpisania_Publication] WHERE PublID=p.PublID) q1
CROSS APPLY 
(SELECT  ISNULL(SUM(Qty),0) sumQty FROM [NewDB].[dbo].[AktPriema_Publication] WHERE PublID=p.PublID) q2
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.10.2013, 21:00
Помогаю со студенческими работами здесь

Как объединить 2 запроса с разными group by ?
Как сделать один запрос из двух, чтобы каждому значению Name ставилось соответствующее значение Total_count_requests ? select Name,...

Объединить два запроса через join
Добрый день! Подскажите пожалуйста, как можно объединить два следующих запроса joinом: SELECT g.from_psa_id ,COUNT(DISTINCT...

Как объединить несколько таблиц получаемых с одного запроса?
Здравствуйте. Есть запрос в цикле, который возвращает 8 таблиц(по одной строке в каждой). Как можно их объединить в одну таблицу?? Код...

Объединить 3 запроса
как обьединить 3 mysql запроса? SELECT file1.name as name1 FROM file1 order by name1 asc SELECT file2.name as name2 FROM...

Объединить 3 запроса в 1
SELECT `user` FROM `site` WHERE `id` = 1 SELECT `status` FROM `users` where `id` = user SELECT `interface` FROM `service` WHERE...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru