(2 horas)
Se trabajo en la segunda consulta, en esta consulta se presento un poco mas de dificultad pero se logro completar usando inner join, porque en la parte de mas enviadas y mejor calificadas se debían extraer datos de otras tablas.
USE [III Proyecto - WebNews]
GO
CREATE PROCEDURE WNSP_Consulta2
@inTema varchar(50),
@inCate varchar (50)
AS
BEGIN
DECLARE @Can int
DECLARE @Tema int
DECLARE @NoticiasXCalificacion table
(
Titulo varchar (200),
Calificacion int
)
DECLARE @NoticiasXEnvios table
(
Titulo varchar (200),
Envios int
)
DECLARE @Noticias table
(
Titulo varchar (200),
Texto varchar (max),
Fecha date ,
Visitas int
)
DECLARE @NoticiasXEnvio table
(
Titulo varchar (200),
Texto varchar (max),
Fecha date ,
Envios int
)
Select @Can = Cantidad
From dbo.Parametros
where Nombre = 'Maximo'
IF @inCate = 'más visitadas'
BEGIN
IF @inTema = 'Portada'
BEGIN
INSERT INTO @Noticias(Titulo,Texto,Fecha,Visitas)
Select Titulo,Texto,Fecha,Visitas
from dbo.Noticias
Where ID in (Select Fk_Noticia
from dbo.NoticiasXPortadas
)
Order by Visitas desc
Select TOP (@Can) *
from @Noticias
Order by Fecha desc
END
ELSE
BEGIN
Select @Tema = ID
from dbo.Temas
where Nombre = @inTema
Insert into @Noticias(Titulo,Texto,Fecha,Visitas)
Select Titulo,Texto,Fecha,Visitas
from dbo.Noticias
Where Noticias.Fk_Subtema in (Select Subtemas.ID
from dbo.Subtemas
Where Fk_Tema = @Tema)
Order by Visitas desc
Select TOP (@Can)*
From @Noticias
Order by Fecha desc
END
END
IF @inCate = 'más enviadas'
BEGIN
IF @inTema = 'Portada'
BEGIN
Insert into @NoticiasXEnvios (Titulo,Envios)
Select S.Titulo,Count(S.ID)
from
(Select dbo.Envios.ID, A.Titulo
from
(Select ID,Titulo
from dbo.Noticias
where ID in (Select Fk_Noticia from dbo.NoticiasXPortadas ))as A
inner join
dbo.Envios
on dbo.Envios.Fk_Noticia = A.ID
) as S
Group by S.Titulo
SELECT TOP (5) *
From @NoticiasXEnvios
Order by Envios desc
END
ELSE
BEGIN
Select @Tema = ID
from dbo.Temas
where Nombre = @inTema
Insert into @NoticiasXEnvios (Titulo,Envios)
Select S.Titulo,Count(S.ID)
from
(Select dbo.Envios.ID, A.Titulo
from
(Select ID,Titulo
from dbo.Noticias
Where Fk_Subtema in (Select Subtemas.ID
from dbo.Subtemas
Where Fk_Tema = @Tema))as A
inner join
dbo.Envios
on dbo.Envios.Fk_Noticia = A.ID
) as S
Group by S.Titulo
SELECT TOP (5) *
From @NoticiasXEnvios
Order by Envios desc
END
END
IF @inCate = 'más enviadas'
BEGIN
IF @inTema = 'Portada'
BEGIN
Insert into @NoticiasXCalificacion (Titulo,Calificacion)
Select S.Titulo,AVG(S.Calificacion)
from
(Select dbo.Calificaciones.Calificacion, A.Titulo
from
(Select ID,Titulo
from dbo.Noticias
Where ID in (Select Fk_Noticia from dbo.NoticiasXPortadas))as A
inner join
dbo.Calificaciones
on dbo.Calificaciones.Fk_Noticia = A.ID
) as S
Group by S.Titulo
SELECT TOP (5) *
From @NoticiasXCalificacion
Order by Calificacion desc
END
ELSE
BEGIN
Select @Tema = ID
from dbo.Temas
where Nombre = @inTema
Insert into @NoticiasXCalificacion (Titulo,Calificacion)
Select S.Titulo,AVG(S.Calificacion)
from
(Select dbo.Calificaciones.Calificacion, A.Titulo
from
(Select ID,Titulo
from dbo.Noticias
Where Fk_Subtema in (Select Subtemas.ID
from dbo.Subtemas
Where Fk_Tema = @Tema))as A
inner join
dbo.Calificaciones
on dbo.Calificaciones.Fk_Noticia = A.ID
) as S
Group by S.Titulo
SELECT TOP (5) *
From @NoticiasXCalificacion
Order by Calificacion desc
END
END
END
GO
No hay comentarios:
Publicar un comentario