CASE中的COUNT - SQL Server

时间:2014-02-06 21:09:15

标签: sql-server tsql

是否可以使用COUNT()作为when子句进行赋值?

像这样:

SELECT @value = 
CASE 
 WHEN 
  COUNT(tableID) 
  FROM (SELECT TOP (5) tableID FROM table) AS id = 20 
 THEN 'Looks Good'
END

我基本上选择了可变数量的行[TOP (@rowCount)],然后根据计算的行数采取行动。我确信我能以某种方式做到这一点,猜测我只是在语法中遗漏了一些东西。

4 个答案:

答案 0 :(得分:2)

如果您正在寻找代码分支,可以使用以下代码:

IF 20 = (select count(*)
          from (select top (5) tableID from table) as id)
    PRINT 'Looks Good'
ELSE
    PRINT '5 will never equal 20'

如果您想获取或设置一个值,则可以使用以下任一方法:

SELECT case count(*)
         when 20 then 'good'
         else 'bad'
       end
 from (select top (5) tableID from table) as id

SELECT case
         when count(*) > 5 then 'Over 5'
         when count(*) < 5 then 'Under 5'
         else 'Exactly 5'
       end
 from (select top (5) tableID from table) as id

答案 1 :(得分:0)

不确定我是否理解这个问题,但也许会尝试类似

的内容
select @val = case when the_number  >= 20 then 'Looks good' end
from (
  select count(*) the_number from some_table 
) x

答案 2 :(得分:0)

假设您至少使用sql2005或更高版本,那么这将起作用 -

--create a table to test with
create table #TestTable
(
    TestTableID int primary key
)

--populate test table
declare @i int = 0;
while @i < 10
begin
    insert into #TestTable select @i;
    set @i = @i + 1;
end
GO

--now create variables to hold the TOP value and to store the result
declare @a int = 5
        ,@value varchar(10);

--correct case stmt syntax
set @value = case 
                when (select count(RecordList) as 'RecordListCount' from (select top (@a) TestTableID as 'RecordList' from #TestTable) as sq) = 20 then 'Looks Good'
            else 'Looks Bad'
        end;
select @value;

请记住将TOP变量放在括号中,并为所有表和列提供别名。

我希望有所帮助!

答案 3 :(得分:0)

我想我理解你的问题。当N是可变的时,你想知道是否有可能有TOP N行的表。 如果我是对的,您需要指定一个表,该表将被订购。

然后你可以使用类似的东西:

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY COLUMN_NAME) TOPCOL
    FROM TABLE_NAME
) A
WHERE TOPCOL <= N

如果我不对,你应该编辑你的问题,因为很难理解你的意思