sql >> Base de Datos >  >> RDS >> Sqlserver

Declaración de caso en consulta SQL

CASE no se usa para control de flujo lógico... use IF / ELSE IF en cambio:

declare @TypeofDayID int
set @TypeofDayID = (Select TypeofDayID from RepInfo where RepInfoID = @RepInfoID)

IF @TypeofDayID = 1 
  Select * 
  from RepInfo RD inner join SellingInfo S on S.RepInfoID = @RepInfoID
ELSE IF @TypeofDayID = 2
  Select * 
  from RepInfo RD inner join UpgradingInfo U on U.RepInfoID = @RepDailyID
ELSE IF @TypeofDayID = 9 or @TypeofDayID = 10
  Select * 
  from RepInfo RD inner join DeliveryInfo D on D.RepDailyID = @RepDailyID

Ten en cuenta... ya que estás usando SELECT * y unirse a una tabla diferente según @TypeOfDayID , es probable que termine con un conjunto de resultados irregulares, lo que significa que tendrá una cantidad variable de columnas según la rama que se tome.

Esto puede ser una molestia para trabajar mediante programación, por lo que sería una buena idea evitar SELECT * por esta razón, así como por otras razones...