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个关键字,并且选择条件的列必须与它们的数据类型匹配。
我需要在不影响查询逻辑的情况下修复上述查询。
答案 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/>