Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Istruzione Case nella query SQL

CASE non è usato per il controllo del flusso logico... usa IF / ELSE IF invece:

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

Tieni presente... poiché stai utilizzando SELECT * e unirsi a una tabella diversa in base a @TypeOfDayID , probabilmente ti ritroverai con un set di risultati frastagliato, il che significa che avrai un numero variabile di colonne in base al ramo preso.

Può essere una seccatura lavorare a livello di codice, quindi sarebbe una buona idea evitare SELECT * per questo, oltre ad altri motivi...