1

SQL Server 2005 でこのような select ステートメントで case ステートメントを使用しようとすると、「サブクエリが EXISTS で導入されていない場合、選択リストで指定できる式は 1 つだけです」というエラーが表示されます。Case は SQL クエリ内で使用できませんか?!

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


Select CASE 
    WHEN @TypeofDayID = 1 
        THEN (Select * from RepInfo RD inner join SellingInfo S on S.RepInfoID = @RepInfoID)
    WHEN @TypeofDayID = 2
        THEN (Select * from RepInfo RD inner join UpgradingInfo U on U.RepInfoID = @RepDailyID)
    WHEN @TypeofDayID = 9 or @TypeofDayID = 10
        THEN (Select * from RepInfo RD inner join DeliveryInfo D on D.RepDailyID = @RepDailyID)
    END
from RepInfo RD
4

2 に答える 2

4

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 *、この理由や他の理由で避けることをお勧めします...

于 2013-02-07T20:19:33.250 に答える
0

あなたがやろうとしていることは、この方法でよりよく処理できると思います。

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
于 2013-02-07T20:21:06.260 に答える