**** Обновление: **SQL Server сгруппированных на максимальное значение в колонке
с использованием Rank() над синтаксисом разделов, доступных в MS SQL Server 2005, действительно мне точку в правильном направлении, это (или, может быть, я должен написать «Я») не может дать мне результаты, которые мне нужны, не прибегая к перечислению строк в коде.
Например, если мы выбираем TOP (1) ранга, я получаю только одно значение, т. Е. Слот 1. Если я использую MAX(), тогда я получаю наивысшее ранжированное значение для каждого слота. . В моем случае это не работает, потому что если верхнее значение слота 2 равно NULL, но оно рядом с значением MAX не пустое, это то, что я хочу.
Таким образом, не удалось найти полностью решение T-SQL, я прибегал к фильтрации как можно больше в SQL, а затем перечисляя результаты в коде на стороне клиента.
Оригинал:
Я был удар advanced T-SQL books, StackOverflow и Google пытается выяснить, как обрабатывать этот запрос, либо с помощью шарниров или с помощью аналитических функций. Пока я не попал в правильную комбинацию.
У меня есть графики, которые ранжируются (более высокое значение, больший приоритет). В каждом расписании есть список воспроизведения определенного количества пронумерованных слотов с файлами.
Что мне нужно сделать, выстраивает в линию все графики и связанные с ними плейлисты, и для каждого слота хватайте файл из графика с наивысшим ранжированием.
так, если бы я был запрос для конкретного клиента с соединения между списками воспроизведения и графики, упорядоченных по Schedule.Rank DESC так:
PlaylistId Schedule.Rank SlotNumber FileId
100 100 1 1001
100 100 2 NULL
100 100 3 NULL
200 80 1 1101
200 80 2 NULL
200 80 3 NULL
300 60 1 1201
300 60 2 NULL
300 60 3 2202
400 20 1 1301
400 20 2 2301
400 20 3 NULL
От этого мне нужно найти FILEID для наивысшего ранга MAX на номер в слот:
SlotNumber FileId Schedule.Rank
1 1001 100
2 2301 20
3 2202 60
Любые идеи о том, как это сделать?
Таблица Определения ниже:
CREATE TABLE dbo.Playlists(
id int NOT NULL)
CREATE TABLE dbo.Customers(
id int NOT NULL,
name nchar(10) NULL)
CREATE TABLE dbo.Schedules(
id int NOT NULL,
rank int NOT NULL,
playlistid int NULL,
customerid int NULL)
CREATE TABLE dbo.PlaylistSlots(
id int NOT NULL,
slotnumber int NOT NULL,
playlistid int NULL,
fileid int NULL)
+1 только потому, что это так приятно видеть правильно заданный вопрос раз в то время, со всеми соответствующими таблицами и всеми - спасибо !!!) –
BTW, pivot не имеет ничего общего с этим (это о «переворачивании» вещей, поэтому значения строк становятся столбцами), поэтому я редактирую соответственно. –
Я не уверен, что книга, о которой идет речь, хороша. Попробуйте следующее: http://www.sql.co.il/ –