Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сложный запрос  [new]
Viola5
Member

Откуда:
Сообщений: 17
Помогите, пожалуйста составить запрос:
есть видеотека с набором кассет различных фильмов
create table Film              
(
 Film_Id char (8) primary key,
 Film_Name char (250) not null,
 Film_ManufactureDate date not null,
 City_ID int references City(City_ID),
 Director_ID int references Director(Director_ID)
 )
create table FilmType          
 (
  FilmType_Id int primary key,
  FilmType_Name char(50) not null
 )
create table ToBeOfType       
 (
  Film_Id char (8) references Film(Film_ID),
  FilmType_Id int references FilmType(FilmType_ID),
  primary key (Film_ID, FilmType_Id)  
 )
create table FilmCopy              
 (
  FilmCopy_Id char(100) primary key,
  FilmCopy_Quantity int not null,
  Location_ID int references Location(Location_ID),
  Film_ID char(8) references Film(Film_ID), 
  State_ID int references CopyState(State_ID) --  
 )
имеются данные о режиссерах и актерах:
create table Actor            
 (
  Actor_ID int primary key,
  Actor_FirstName char(100) not null,
  Actor_LastName char(100) not null,
  Actor_Gender  char(50) not null,
  Actor_Age int
 )
create table RoleOfActorsInFilms  
 (
  Film_Id char (8) references Film(Film_ID),
  Actor_ID int references Actor(Actor_ID),
  Roles_ID int references Roles(Roles_ID) ,
  primary key (Film_ID, Actor_ID, Roles_ID)  
 )
  create table Director          
 (
  Director_ID int primary key,
  Director_FirstName char(100) not null,
  Director_LastName char(100) not null
 )
а также о клиентах видеотеки и их заказах:
create table Subscriber         
 (
  Subscriber_ID int primary key,
  Subscriber_FirstName char(100) not null,
  Subscriber_LastName char(100) not null,
  Subscriber_Phone char(11),
  Subscriber_BirthDate date not null,
 )
create table RentDetails        
 (
  RentDetails_ID int primary key,
  RentDate date,
  ReturnDate date,
  RentPrice float not null,
  PaymentForm char(50) not null,
  RentQuantity int not null,
  State_Id int references CopyState(State_ID),
  Employee_ID int references Employee(Employee_ID),
  Subscriber_ID int references Subscriber(Subscriber_ID),
  FilmCopy_Id char (100) references FilmCopy(FilmCopy_ID)  
 )
Требуется составить для каждого клиента список: любимы жанр, любимый актер, любимый режиссер...
Запуталась в обилии таблиц и информации... Помогите
16 ноя 11, 00:03    [11602942]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Viola5,

что конкретно у вас не получилось?! где ваш запрос, с которым возникли трудности!?
16 ноя 11, 07:00    [11603272]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
aleks2
Guest
Не смешите.
declare @Film table             
(
 Film_Id char (8) primary key,
 Film_Name char (250) not null,
 Film_ManufactureDate datetime not null,
 City_ID int, -- references City(City_ID),
 Director_ID int -- references Director(Director_ID)
 )

declare @FilmType table
 (
  FilmType_Id int primary key,
  FilmType_Name char(50) not null
 )
declare @ToBeOfType table      
 (
  Film_Id char (8), -- references Film(Film_ID),
  FilmType_Id int, --- references FilmType(FilmType_ID),
  primary key (Film_ID, FilmType_Id)  
 )
declare @FilmCopy table             
 (
  FilmCopy_Id char(100) primary key,
  FilmCopy_Quantity int not null,
  Location_ID int, -- references Location(Location_ID),
  Film_ID char(8), -- references Film(Film_ID), 
  State_ID int -- references CopyState(State_ID) --  
 )

declare @Actor table           
 (
  Actor_ID int primary key,
  Actor_FirstName char(100) not null,
  Actor_LastName char(100) not null,
  Actor_Gender  char(50) not null,
  Actor_Age int
 )
declare @RoleOfActorsInFilms  table
 (
  Film_Id char (8), -- references Film(Film_ID),
  Actor_ID int, -- references Actor(Actor_ID),
  Roles_ID int, -- references Roles(Roles_ID) ,
  primary key (Film_ID, Actor_ID, Roles_ID)  
 )
  declare @Director  table
 (
  Director_ID int primary key,
  Director_FirstName char(100) not null,
  Director_LastName char(100) not null
 )

declare @Subscriber table  
 (
  Subscriber_ID int primary key,
  Subscriber_FirstName char(100) not null,
  Subscriber_LastName char(100) not null,
  Subscriber_Phone char(11),
  Subscriber_BirthDate datetime not null
 )
declare @RentDetails table   
 (
  RentDetails_ID int primary key,
  RentDate datetime,
  ReturnDate datetime,
  RentPrice float not null,
  PaymentForm char(50) not null,
  RentQuantity int not null,
  State_Id int, -- references CopyState(State_ID),
  Employee_ID int, -- references Employee(Employee_ID),
  Subscriber_ID int, -- references Subscriber(Subscriber_ID),
  FilmCopy_Id char (100) -- references FilmCopy(FilmCopy_ID)  
 )

-- любимый жанр
;with
rd as (
  select t.Subscriber_ID, t.RentQuantity, bot.FilmType_Id
  FROM 
  @RentDetails T 
  inner join 
  @FilmCopy fc 
  on T.FilmCopy_Id=fc.FilmCopy_Id
  inner join 
  @ToBeOfType bot
  on fc.Film_ID=bot.Film_ID
)
,
rdg as ( 
   select Subscriber_ID, FilmType_Id, sum(RentQuantity) Quantity
   from rd
   GROUP BY Subscriber_ID, FilmType_Id
)
,
rdgn as (
   select Subscriber_ID, FilmType_Id, Quantity, rank() over(partition by Subscriber_ID ORDER BY Quantity DESC) N
   from rdg
)
select *
FROM
(select * from rdgn WHERE N=1) T
INNER JOIN
@Subscriber S
ON S.Subscriber_ID=T.Subscriber_ID
INNER JOIN
@FilmType FT
ON FT.FilmType_Id=T.FilmType_Id
16 ноя 11, 07:18    [11603285]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Viola5
Помогите, пожалуйста составить запрос:
есть видеотека с набором кассет различных фильмов
***
Требуется составить для каждого клиента список: любимы жанр, любимый актер, любимый режиссер...
Запуталась в обилии таблиц и информации... Помогите


А препод зверь наверное? Сток таблиц и информации сразу...
16 ноя 11, 07:36    [11603295]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Viola5
Member

Откуда:
Сообщений: 17
SanyL,
это один из 12-ти........ Остальные были не лучше. Вроде справилась, но над этим зависла на целые сутки... Наворотила кучу селектов (вью) в надежде потом их объединить, но сдалась.
16 ноя 11, 09:10    [11603390]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить