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

Сложный запрос на выборку

03.11.2013, 13:24. Показов 1285. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Моих знаний не хватает, чтоб сформировать нужный запрос.
Суть такая: есть таблица с изданиями, в которой есть 2 поля: код и название. Есть таблица авторов, с полями код и фио. И есть связующая таблица с полями код_автора, код_издания и доля_автора (доли авторов могут быть одинаковыми). У одного издания может быть несколько авторов (это важно).
Мне необходимо написать запрос, который будет формировать следующую выборку:
- Код издания
- Название издания
- ФИО авторов издания через запятую
или другую выборку:
- Код издания
- Название издания
- ФИО автора с максимальной долей (если доли одинаковы, то первого по алфавиту автора)
- Доля автора

Весь мозг уже сломал, не могу понять как это сделать. Помогите запросом, или хотя бы идеей как это сделать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.11.2013, 13:24
Ответы с готовыми решениями:

Сложный запрос к БД
Есть БД, в ней таблица main с полями ip(адрес абонента),datetime(время запроса),size(размер ответа в байтах). Внимание!!!! Необходимо...

Сложный запрос
Всем доброго времени суток. Всех милых дам с 8 марта!:rose: И так у меня БД: Реляционная модель: Нужно получить...

Сложный запрос
Всем привет! (пример) Есть 3 таблицы:Users, Auto, Motorcycles. (Они связаны через ключевое поле userID.) Мне нужно вывести...

7
41 / 40 / 23
Регистрация: 10.03.2012
Сообщений: 374
03.11.2013, 16:27
Vaste, нужно сделать естественное соединение между отношением "издание" и связующей таблицей, потом между полученной таблицей и отношением "автор", а затем сделать проекцию на необходимые атрибуты
0
1 / 1 / 0
Регистрация: 23.04.2012
Сообщений: 42
04.11.2013, 10:13  [ТС]
Цитата Сообщение от RocBoy-D Посмотреть сообщение
Vaste, нужно сделать естественное соединение между отношением "издание" и связующей таблицей, потом между полученной таблицей и отношением "автор", а затем сделать проекцию на необходимые атрибуты
Вы мне вот прям глаза открыли. Прям как вот я жил раньше, даже не представляю! Я как бы и сам в курсе, что надо таблицы соединить! Затруднение как раз в "проекции". (ПС. Не будет вам спасибо в репу).
SQL
1
2
3
4
5
6
7
8
9
10
SELECT
Издания.Код
,Издания.Название
,MAX(АвторыИздания.Доля)
,Авторы.Издания.КодАвтора
,Авторы.ФИО
FROM
Издания
INNER JOIN АвторыИздания ON АвторыИздания.КодИздания = Издания.Код
INNER JOIN Авторы ON Авторы.Код = АвторыИздания.КодАвтора
Вот код, что я пытал. Но он при равных долях авторов одного издания выводит ОБОИХ. А мне надо ОДНОГО. Вот чё я не могу понять. А не то, что надо соединения таблиц сделать.
0
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 5
04.11.2013, 10:22
Через временные таблицы. Для первой еще курсор использовать.
0
1 / 1 / 0
Регистрация: 23.04.2012
Сообщений: 42
04.11.2013, 10:23  [ТС]
Поподробней, пожалуйста. Или ссылки на примеры.
0
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 5
04.11.2013, 10:38
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DECLARE @temp1 TABLE (код_издания BIGINT, название VARCHAR(200), авторы VARCHAR(MAX))
INSERT INTO @temp1 
SELECT DISTINCT код, название, ''
FROM издания WITH(nolock)
 
DECLARE @код_издания BIGINT, @фио_автора VARCHAR(200)
DECLARE mcur cursor LOCAL fast_forward FOR
SELECT DISTINCT изд.код, авт.фио
FROM издания изд WITH(nolock)
JOIN связующая связ WITH(nolock) ON изд.код = связ.код_издания
JOIN авторы авт WITH(nolock) ON авт.код = связ.код_автора
OPEN mcur
fetch NEXT FROM mcur INTO @код_издания, @фио_автора
while @@FETCH_STATUS = 0 BEGIN
   UPDATE @temp1 SET авторы = авторы + ', ' + @фио_автора WHERE код_издания = @код_издания
 
   fetch NEXT FROM mcur INTO @код_издания, @фио_автора
END
close mcur
deallocate mcur
 
SELECT * FROM @temp1
второй по аналогии. пожалуй, там тоже курсор нужен.
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
04.11.2013, 11:17
Цитата Сообщение от Vaste Посмотреть сообщение
А мне надо ОДНОГО
по какому принципу выбирается ОДИН при прочих равных?
Сори, невнимательно прочитал.
Тут будет зависеть от языковых настроек - MAX(ФИО)
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
04.11.2013, 11:42
1.
T-SQL
1
2
3
4
5
6
7
8
9
10
select
 b.book_id,
 b.BookName,
 t.AuthorsList
from
 Books b cross apply
 (
  select
   stuff((select ', ' + a.AuthorName from BooksAuthors ba join Authors a on a.author_id = ba.author_id where ba.book_id = b.book_id order by a.AuthorName for xml path(''), type).value('.', 'varchar(200)'), 1, 2, '')
 ) t(AuthorsList);
2.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
select top (1) with ties
 b.book_id,
 b.BookName,
 a.AuthorName,
 ba.Percentage
from
 Books b join
 BooksAuthors ba on ba.book_id = b.book_id join
 Authors a on a.author_id = ba.author_id
order by
 row_number() over (partition by b.book_id order by ba.Percentage desc, a.AuthorName);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2013, 11:42
Помогаю со студенческими работами здесь

Сложный запрос
Доброго времени суток! Знатоки SQL подскажите пожалуйста как привести в рабочий вид мой запрос: DECLARE @data AS XML, ...

Сложный запрос
Сгруппировать по keyGroup. Если в группе больше одной записи Если в группе есть хоть одна запись у которой isFirst = 1, получить...

сложный запрос
Есть таблица А: id | date | number, id - int date - datetime number - int, 0, 1 или 2 Необходим запрос в табл А, где...

Сложный запрос
Здравствуйте!у меня есть БД: Успеваемость(#Nз, #ИдКурса, #Семестр, #УчНед, #ВидОтчета, Оценка) ОтчетГруппы(#ИдКурса, #Nгр, #УчНед,...

Сложный запрос
Не получается реализовать запрос. По идеи я обращаюсь к таблице с консолид.лицами, которые являются физ.лицами и юр.лицами. Есть разные...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru