【发布时间】:2013-02-07 20:15:15
【问题描述】:
我试图在 SQL Server 2005 中像这样在 select 语句中使用 case 语句,但我收到错误消息“当 EXISTS 未引入子查询时,只能在选择列表中指定一个表达式。”不能在 SQL 查询中使用 Case 吗?!
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
【问题讨论】:
-
当您在
SELECT上使用CASE语句来定义单个列时,您不能执行SELECT CASE WHEN something THEN SELECT *... -
没有。子查询不能。使用
if块。 -
同意上述。您可以在 SELECT 期间使用 CASE 测试值,但如果您希望执行不同类型的代码,则需要使用 IF。
-
您可能会遇到此查询或当前答案的性能问题,因为可能会针对 3 个条件之一进行优化,而另外两个可能会更慢,或者查询计划将经常重建。 stackoverflow.com/q/289625/16391
标签: sql sql-server-2005