Я новичок, я работаю с SQL Server 2008 R2 У меня есть 3 таблицы (базы данных фильмотеки) клиентов и жанры кино, клиентов и актеров, клиенты и директора, запрос, который я должен реализовать этоSQL максимальное значение отображения запроса или все значения одного клиента
«дисплей любимый актер, режиссер, любимый тип фильма (жанр) , где любимый означает, что фильм был сдан в аренду наибольшее количество раз»
а таблицы, которые были упомянуты выше, имели Id, имени клиента клиента (для таблиц с актерами) актера ид, имя актера, раз фильма с этим конкретным актером был взят клиентом, то же самое я имею в других таблицах (любимый жанр фильма, любимый режиссер)
Проблема в том, что у меня есть клиенты, которые не имеют максимального значения или имеют несколько значений с одинаковым номером, т.е. MAX() здесь не работают.
пожалуйста, если кто-нибудь может помочь?
вот код для любимой таблицы режиссера:
enter code here CREATE VIEW CustFavorDirector AS
SELECT CustTakenFilms.CustomerID ,CustTakenFilms.[Customer Name],
ActorDirector.ParticipantID, ActorDirector.[Participant Name], COUNT(ActorDirector.ParticipantID) 'Times was taken'
FROM
(
SELECT
Cust.CustomerID,
Cust.FirstName + ' ' + Cust.LastName AS 'Customer Name' ,
Fil.FilmID, Fil.FilmName
FROM
FilmLibrary.dbo.Customer AS Cust
INNER JOIN
FilmLibrary.dbo.Rental AS Rent
ON
Cust.CustomerID = Rent.CustomerID
INNER JOIN
FilmLibrary.dbo.RentalDetails AS RentDet
ON
Rent.RentalID = RentDet.RentalID
INNER JOIN
FilmLibrary.dbo.FilmCopy AS FilCop
ON
RentDet.FilmCopyID = FilCop.FilmCopyID
INNER JOIN
FilmLibrary.dbo.Film AS Fil
ON
FilCop.FilmID = Fil.FilmID
) AS CustTakenFilms
INNER JOIN
(
SELECT Film.FilmID, Film.FilmName,Part.ParticipantID , Part.FirstName + ' ' + Part.LastName AS 'Participant Name', Rol.RoleTypeName
FROM
FilmLibrary.dbo.Film AS Film
INNER JOIN
FilmLibrary.dbo.FilmDetails AS FilDet
ON
Film.FilmID = FilDet.FilmID
INNER JOIN
FilmLibrary.dbo.Participant AS Part
ON
FilDet.ParticipantID = Part.ParticipantID
INNER JOIN
FilmLibrary.dbo.RoleType AS Rol
ON
FilDet.RoleTypeID = Rol.RoleTypeID
WHERE Rol.RoleTypeName IN ('Director')
) AS ActorDirector
ON
CustTakenFilms.FilmID = ActorDirector.FilmID
GROUP BY CustTakenFilms.CustomerID , CustTakenFilms.[Customer Name],
ActorDirector.ParticipantID, ActorDirector.[Participant Name]
это то, что я получаю, когда я пытаюсь сделать выбор на этой точке зрения:
CustomerID Customer Name ParticipantID Participant Name Times was taken
111123 Abel Smith 1 Clark Foster 2
111123 Abel Smith 15 Philip Morris 2
111456 Aurora Jones 13 Clay Johnson 2
111456 Aurora Jones 14 Brittany Walker 1
111456 Aurora Jones 15 Philip Morris 1
111789 Alejandro Wil 12 Andrey Konchalovsky 2
111789 Alejandro Wil 14 Brittany Walker 2
112123 Ayana Thomas 12 Andrey Konchalovsky 3
112123 Ayana Thomas 15 Philip Morris 1
112123 Ayana Thomas 16 Xavier Lonso 1
113456 Daniel Bell 12 Andrey Konchalovsky 1
113456 Daniel Bell 13 Clay Johnson 2
113456 Daniel Bell 14 Brittany Walker 3
113456 Daniel Bell 15 Philip Morris 1
Можете ли вы, по крайней мере, предоставить образцы записей с желаемым результатом? –
уверен, что если в столбце «Время было принято», появится одно максимальное значение, которое я хочу отобразить в противном случае, если вы увидите несколько одинаковых максимальных значений, отображающих их все, например, если появится 1,2,3, а затем отобразите 3, если появится 1,1 , 2,2, тогда отображается только 2,2. – Konrud
Один из способов сделать это - получить совокупный подсчет количества раз, когда у них есть какой-либо директор, и добавить столбец Row_Number(), разделенный клиентом и упорядоченный по счету Desc в CTE, а затем вернуть результаты, где столбец Row_Number() равен 1. Если вы хотите попробовать это самостоятельно, вам нужно исследовать «Общие выражения таблиц» и «Оконные функции». –