sql >> データベース >  >> RDS >> Sqlserver

SQL クエリの Case ステートメント

    CASE 論理フロー制御には使用されません... IF を使用します / ELSE IF 代わりに:

    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
    

    覚えておいてください... SELECT * を使用しているため 、および @TypeOfDayID に基づく別のテーブルへの結合 、最終的にギザギザの結果セットになる可能性があります。つまり、どの分岐が行われるかによって列の数が異なります。

    これをプログラムで操作するのは面倒なので、 SELECT * を避けることをお勧めします。 この理由だけでなく、他の理由から...



    1. ローカルホストPHPアプリケーションからのHerokuPostgres接続

    2. SQL:最初に見つかった行の結合を制限する方法は?

    3. mysqlは、あるフィールドが別のフィールドにリンクする回数をカウントします

    4. T-SQLを使用して2つの整数値を除算してfloat結果を取得するにはどうすればよいですか?