Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Case Statement w zapytaniu SQL

CASE nie jest używany do kontroli przepływu logicznego... użyj IF / ELSE IF zamiast tego:

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

Pamiętaj... ponieważ używasz SELECT * i dołączanie do innej tabeli na podstawie @TypeOfDayID , prawdopodobnie otrzymasz postrzępiony zestaw wyników, co oznacza, że ​​będziesz mieć różną liczbę kolumn w zależności od wybranej gałęzi.

Może to być trudne do pracy programowej, więc dobrym pomysłem byłoby unikanie SELECT * z tego powodu, a także z innych powodów...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najszybszy sposób na usunięcie znaków nienumerycznych z VARCHAR w SQL Server

  2. SQL Server 2016:Wstaw dane

  3. sql server 2008 - stała niecałkowita w klauzuli ORDER BY

  4. Zapytanie SQL do generowania macierzy, takiej jak tabela powiązana z zapytaniem wyjściowym w SQL Server

  5. procedury składowane z sqlAlchemy