Sql server查询:条件选择具有top关键字的列

时间:2014-05-21 12:26:57

标签: sql sql-server sql-server-2008 tsql

DECLARE @mode INT; 

SELECT CASE
        WHEN @mode = 0 
            THEN t.Column1,Count(t.Column2) as Column2 
        ELSE top 1 t.Column1,Count(t.Column2) as Column2 
        END 
FROM Table1 t 
--Where some list of parameters 
Group by t.Column1,t.Column2

请仔细阅读上述sql语句。我需要在不改变查询主体的情况下通过两种模式评估查询,即。 From,Where和Group子句只应写一次,而不是在结果查询中的任何地方复制它们(每一个)

如果@mode = 0则应返回上述列,并且

如果@mode<> 0然后" Top1"记录应该返回

两个选择条件都使用相同的给定参数列表。

当我运行上述查询时,我面临错误"Incorrect syntax near the keyword 'top'。"因为我们无法在条件选择语句中使用前1个关键字,并且选择条件的列必须与它们的数据类型匹配。

我需要在不影响查询逻辑的情况下修复上述查询。

3 个答案:

答案 0 :(得分:3)

IF(@mode <= 0)
BEGIN
   Select Column1,Count(t.Column2) as Column2 
   From Table1 t 
   Group by t.Column1,t.Column2
END
Else
BEGIN
   Select top 1 *
   From Table1 t 
END

或使用where condition

创建临时表并加载数据
Create Table #Temp (Column1 datetype,Column2 datetype)
Insert Into #Temp (Column1,Column2)
Select Column1,Column2
From Table1 t 
Where condition

  IF(@mode <= 0)
    BEGIN
       Select Column1,Count(t.Column2) as Column2 
       From #Temp t 
       Group by t.Column1,t.Column2
    END
    Else
    BEGIN
       Select top 1 *
       From #Temp t 
    END

答案 1 :(得分:0)

BEGIN
DECLARE @mode INT; 
SET @mode = 0;
IF  @mode <= 0
    SELECT t.Column1,count(t.Column2) as  Column2 from Table_Name t
    GROUP BY t.Column1,t.Column2
ELSE
    SELECT TOP 1 t.Column1,count(t.Column2) as Column2 from Table_Name t
    GROUP BY t.Column1,t.Column2
END

答案 2 :(得分:0)

DECLARE @mode INT; <br/>
Set @mode  = 1 --for Min set of records <br/>
--Set @mode  = 100 --for Max / full set of records <br/>
SELECT TOP (@var) PERCENT * t.Column1 ,Count(t.Column2) AS Column2 FROM Table1 t <br/>
--Where some list of parameters  <br/>
GROUP BY t.Column1 ,t.Column2 <br/>