2013-04-03 64 views
7

有沒有一種方法在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

回答

2

一種選擇是從查詢中刪除這一點,做這樣的事情:

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

2

你不能有一個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 
1

@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