是否可以使用COUNT()作为when子句进行赋值?
像这样:
SELECT @value =
CASE
WHEN
COUNT(tableID)
FROM (SELECT TOP (5) tableID FROM table) AS id = 20
THEN 'Looks Good'
END
我基本上选择了可变数量的行[TOP (@rowCount)]
,然后根据计算的行数采取行动。我确信我能以某种方式做到这一点,猜测我只是在语法中遗漏了一些东西。
答案 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
如果我不对,你应该编辑你的问题,因为很难理解你的意思