У меня немного сложная настройка базы данных. Вот схема, и то, что я пытаюсь выполнить:Использование таблицы «списка воспроизведения» для упорядочивания дисков для других таблеток
Content
ContentID int not null primary key
SectionID int not null
foreign key on Section.SectionID
ContentData varchar(MAX)
Section
SectionID int not null primary key
SectionTitle varchar(255)
Playlist
PlaylistPosition int not null primary key
ContentID int not null
foreign key on Content.ContentID
Содержание:
ContentID SectionID ContentData
--------- --------- -----------
0 1 Content #1
1 1 Content #2
2 1 Content #4
3 1 Content #3
4 0 Stuff #2
5 0 Stuff #1
6 2 Things #3
7 3 MisC#2
8 2 Things #1
9 2 Things #2
10 3 MisC#1
Раздел:
SectionID SectionTitle
--------- ------------
0 Stuff
1 Content
2 Things
3 Misc
Плейлист:
PlaylistPosition ContentID
---------------- ---------
10 5
20 4
30 0
40 1
50 3
60 2
70 8
80 9
90 6
100 10
110 7
Желаемая выход из запрос:
SectionID SectionTitle FirstPlaylistPosition FirstContentID
--------- ------------ --------------------- --------------
1 Stuff 10 5
0 Content 30 0
2 Things 70 8
3 Misc 100 10
Я хочу, чтобы приведенный выше запрос представлялся в представлении, чтобы его можно было запросить как псевдо-таблицу.
Цель состоит в том, чтобы получить список всех разделов и получить как первую позицию в списке воспроизведения первого элемента, соответствующего этому разделу, так и идентификатор этого элемента в таблице содержимого. Обратите внимание, что разделы, идентификаторы содержимого и т. Д. Могут быть полностью неработоспособными. Определяющий порядок - это таблица списков воспроизведения.
Это была моя первая попытка с использованием подзапроса:
SELECT Section.SectionID,
Section.SectionTitle,
MIN(Playlist.PlaylistPosition) AS firstPlaylistPosition,
(SELECT ContentID
FROM Playlist
WHERE dbo.Playlist.PlaylistPosition = MIN(Playlist.PlaylistPosition)
) AS firstContent
FROM Section
INNER JOIN
Content
ON Content.ContentID=Section.SectionID
INNER JOIN
Playlist
ON Playlist.ContentID = Content.ContentID
GROUP BY Section.SectionID, Section.SectionTitle
ORDER BY firstPlaylistPosition
Это бросает ошибку:
An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.
Я попытался отступить немного, и по крайней мере, получить правильный правильный первый плейлист должность:
SELECT Section.SectionID,
Section.SectionTitle,
MIN(Playlist.PlaylistPosition) AS firstPlaylistPosition
FROM Section
INNER JOIN
Content
ON Content.ContentID = Section.SectionID
INNER JOIN
Playlist
ON Playlist.ContentID = Content.ContentID
GROUP BY Section.SectionID, Section.SectionTitle
ORDER BY firstPlaylistPosition
Это не giv е правильные результаты:
SectionID SectionTitle FirstPlaylistPosition
--------- ------------ ---------------------
0 Content 30
1 Stuff 40
3 Misc 50
2 Things 60
Подавать Регистрация и оригинальный выбор производит точно такие же результаты:
SELECT Section.SectionID,
Section.SectionTitle,
MIN(Playlist.PlaylistPosition) AS firstPlaylistPosition
FROM Playlist
INNER JOIN
Content
ON Playlist.ContentID = Content.ContentID
INNER JOIN
Section
ON Content.ContentID = Section.SectionID
GROUP BY Section.SectionID, Section.SectionTitle
ORDER BY firstPlaylistPosition
Я действительно только группы по названию раздела:
SELECT Section.SectionID,
Section.SectionTitle,
MIN(Playlist.PlaylistPosition) AS firstPlaylistPosition
FROM Playlist
INNER JOIN
Content
ON Playlist.ContentID = Content.ContentID
INNER JOIN
Section
ON Content.ContentID = Section.SectionID
GROUP BY Section.SectionID
ORDER BY firstPlaylistPosition
но что дает
Column 'Section.SectionTitle' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Ваш желаемый результат имеет некоторые опечатки, которые я считаю. Кроме того, вы должны подумать о том, чтобы немного смягчить свой вопрос, поскольку он очень длинный. –