sql – 选择子查询里面的case语句何时?

前端之家收集整理的这篇文章主要介绍了sql – 选择子查询里面的case语句何时?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在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时你也应该有订单.否则,结果是不确定的.

猜你在找的MsSQL相关文章