Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema al usar case con una variable

Estas en el tema de Problema al usar case con una variable en el foro de SQL Server en Foros del Web. Buenas, estoy intentando evaluar el contenido de una variable con un case para segun su contenido ejecutar ciertas sentencias, pero me da errores el codigo ...
  #1 (permalink)  
Antiguo 01/12/2011, 11:22
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 13 años, 8 meses
Puntos: 0
Problema al usar case con una variable

Buenas, estoy intentando evaluar el contenido de una variable con un case para segun su contenido ejecutar ciertas sentencias, pero me da errores el codigo es el siguiente

create proc cliente_productos
@nombre char(50),
@apellido char(50),
@año int
as
if exists (select * from Person.Contact c, Sales.Customer cus, Sales.SalesOrderHeader soh where c.ContactID = soh.ContactID and soh.CustomerID = cus.CustomerID and c.FirstName = @nombre and c.LastName = @apellido)
begin
declare @cont int
set @cont = (select count(p.ProductID)
from Person.Contact c, Sales.Customer cus, Sales.SalesOrderHeader soh, Sales.SalesOrderDetail sod, Production.Product p
where c.ContactID = soh.ContactID and soh.CustomerID = cus.CustomerID and sod.SalesOrderID = soh.SalesOrderID and sod.ProductID = p.ProductID and c.FirstName = @nombre and c.LastName = @apellido and year(OrderDate) = @año) =
case
when @cont >=10 then
select sum(soh.TotalDue) as Total_Comprado_En_El_Año
from Person.Contact c, Sales.Customer cus, Sales.SalesOrderHeader soh, Sales.SalesOrderDetail sod, Production.Product p
where c.ContactID = soh.ContactID and soh.CustomerID = cus.CustomerID and sod.SalesOrderID = soh.SalesOrderID and sod.ProductID = p.ProductID and c.FirstName = @nombre and c.LastName = @apellido and year(OrderDate) = @año

select p.Name
from Person.Contact c, Sales.Customer cus, Sales.SalesOrderHeader soh, Sales.SalesOrderDetail sod, Production.Product p
where c.ContactID = soh.ContactID and soh.CustomerID = cus.CustomerID and sod.SalesOrderID = soh.SalesOrderID and sod.ProductID = p.ProductID and c.FirstName = @nombre and c.LastName = @apellido and year(OrderDate) = @año

when @cont between 1 and 9 then
select sum(soh.TotalDue) as Total_Comprado_En_El_Año
from Person.Contact c, Sales.Customer cus, Sales.SalesOrderHeader soh, Sales.SalesOrderDetail sod, Production.Product p
where c.ContactID = soh.ContactID and soh.CustomerID = cus.CustomerID and sod.SalesOrderID = soh.SalesOrderID and sod.ProductID = p.ProductID and c.FirstName = @nombre and c.LastName = @apellido and year(OrderDate) = @año

when @cont = 0 then
print 'No hay productos'
end
end
else
print 'No es un cliente'


y los errores que me salen son los siguientes

Msg 102, Level 15, State 1, Procedure cliente_productos, Line 11
Sintaxis incorrecta cerca de '='.
Msg 156, Level 15, State 1, Procedure cliente_productos, Line 21
Sintaxis incorrecta cerca de la palabra clave 'when'.
Msg 156, Level 15, State 1, Procedure cliente_productos, Line 25
Sintaxis incorrecta cerca de la palabra clave 'when'.
Msg 156, Level 15, State 1, Procedure cliente_productos, Line 29



lo que intento hacer es almacenar la cantidad de productos que un cliente ha comprado por año en la variable @cont y segun esa cantidad ejecutar otras sentencias..

De antemano gracias por su ayuda
  #2 (permalink)  
Antiguo 01/12/2011, 11:26
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Problema al usar case con una variable

Código:
declare @cont int
set @cont = (select count(p.ProductID)
from Person.Contact c, Sales.Customer cus, Sales.SalesOrderHeader soh, Sales.SalesOrderDetail sod, Production.Product p
debe ser

Código:
declare @cont int
select @cont = (select count(p.ProductID)
from Person.Contact c, Sales.Customer cus, Sales.SalesOrderHeader soh, Sales.SalesOrderDetail sod, Production.Product p


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 01/12/2011, 11:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema al usar case con una variable

ya lo probe y sigue con el error, el set no creo que sea el problema ya que antes de usar el case lo hice con if's y me resulto lo que quiere decir que la variable si me estaba almacenando el valor que deseaba.. El problema empezo cuando quise hacerlo un poco mas optimo usando el case
  #4 (permalink)  
Antiguo 01/12/2011, 11:53
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Problema al usar case con una variable

ahh ya, es que no esta identado el code y es dificil de leer..

pero lo que alcanzo a ver es que esta mal usado el case..

tal vez deberia ser de la forma

Código:
SELECT CASE WHEN condicion THEN 'algo' ELSE 'otro' END
FROM   CONSULTA


IF @@rowcount = 0 SELECT 'NO HAY INFO'

adicional, como comentario estas aplicando la funcion Year al campo OrderDate, lo que hara que tu consulta sea mas lenta.. hay varios post por aqui en


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Etiquetas: case, select, usar, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:37.