sql - 在 then of case when 语句中选择子查询?

标签 sql sql-server-2008 subquery 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 时你也应该有 order by .否则,结果是不确定的。

关于sql - 在 then of case when 语句中选择子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795224/

相关文章:

php - 选择多对多关系中没有类别的记录

sql-server - sql ,比较子查询中的聚合平均值函数

SQL select for xml explicit——当值为空时需要帮助定义备用结构

mysql - 如何优化这个非常慢的 MySQL 查询?

php - 按其他表的结果排序

sql - 简单的sql : how do I group into separate columns?

sql - 如何使用group by编写sql查询

mysql - SQL 关联实体的语法错误

SQL Server存储过程插入重复行

c# - GridView 没有拾取空数据对象