在语句的情况下选择子查询?

问题描述:

有没有一种方法在sql server的情况下/运行时,从“那么” 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' 
+0

你想在单列值内返回10行或5行或3行等?不知道我跟着。 – 2013-04-03 18:38:35

+0

这些仅仅是什么,我需要做的例子....真正的查询是更长的时间,而不是顶部anythings。 – Rainhider 2013-04-03 18:49:15

一种选择是从查询中删除这一点,做这样的事情:

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。否则,结果是不确定的。

+0

好,子查询,其实就是在运行内“那么”语句的查询的例子。我要运行的实际查询有列和总和以及其他一些东西。 – Rainhider 2013-04-03 18:46:18

+1

@PerryDay。 。 。那么,你不能用一条SQL语句来完成它。 – 2013-04-03 18:49:43

+0

好的。这正是我所寻找的。谢谢! – Rainhider 2013-04-03 18:51:32

你不能有一个SELECT中。您可以使用IF ... ELSE,例如

IF @Group = 6500 
    select top 10* from Table1 AS Report 
ELSE IF @Group = 5450 
    select top 5* from Table1 AS Report 
ELSE IF @Group = 2010 
    select top 3* from Table1 AS Report 
ELSE IF @Group = 2000 
    select top 1* from Table1 AS Report 

@Gordon已经有答案了。这只是第二个选择。您可以使用动态查询。


declare @query varchar(max) 
declare @Group int 
set @query = '' 

if @Group = 6500 
    set @query = 'select top 10 * from table1' 
if @Group = 5450 
    set @query = 'select top 5 * from table1' 
if @Group = 2010 
    set @query = 'select top 3 * from table1' 
if @Group = 2000 
    set @query = 'select top 1 * from table1' 

exec(@query) 
+0

这个编译没有错误,但它不显示查询的结果。我需要它来显示结果。 – Rainhider 2013-04-03 18:48:27

+0

你需要给集团变量的值,如设置@group = 6500,否则,查询将是空的。 – ljh 2013-04-03 19:58:01