有没有办法在sql server case / when语句中从“then”运行select语句? (我需要从then语句运行子查询.)我不能在where语句中使用它.
select case @Group when 6500 then (select top 10 * from Table1) when 5450 then (select top 5 * from Table1) when 2010 then (select top 3 * from Table1) when 2000 then (select top 1 * from Table1) else 0 end as 'Report'
解决方法
一种选择是从查询中删除它并执行以下操作:
declare @Numrows int; select @Numrows = (case @Group when 6500 then 10 when 5450 then 5 when 2010 then 3 when 2000 then 1 else 0 end); select top(@NumRows) * from Table1;
你也可以这样做:
with const as ( select (case @Group when 6500 then 10 when 5450 then 5 when 2010 then 3 when 2000 then 1 else 0 end) as Numrows ) select t.* from (select t.*,ROW_NUMBER() over () as seqnum from table1 t ) t cross join const where seqnum <= NumRows;
在这种情况下,您需要列出列以避免在列表中获取seqnum.
顺便说一下,通常在使用top时你也应该有订单.否则,结果是不确定的.