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

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

29.10.2013, 17:39. Показов 1307. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru