2014-02-06 6 views
0

Возможно ли присвоить значение с помощью COUNT() в качестве предложения when?COUNT in CASE - SQL Server

Как так:

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

я в основном то, чтобы выбрать переменное количество строк [TOP (@rowCount)], а затем принять решение на основе количества строк подсчитанных. Я уверен, что смогу это сделать каким-то образом, предполагая, что я просто что-то пропустил в синтаксисе.

ответ

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 
+0

Спасибо Филиппу !!! Второй работал отлично для того, что мне нужно. – jnasty

0

Не уверен, если я понимаю этот вопрос, но, может быть, попробовать что-то вроде

select @val = case when the_number >= 20 then 'Looks good' end 
from (
    select count(*) the_number from some_table 
) x 
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 переменную в круглые скобки и поставить псевдонимы для всех таблиц и столбцов.

Я надеюсь, что это поможет!

0

Я думаю, что понял ваш вопрос. Вы хотите знать, возможно ли иметь TOP N строк таблицы, когда N является переменной. Если я прав, вам нужно указать столбец, который будет заказывать таблица.

Затем вы можете использовать что-то вроде:

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

Если я не прав, вы должны изменить свой вопрос, потому что это очень трудно понять, что вы имели в виду