viernes, 25 de noviembre de 2016

Segunda consulta

(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