Комментарии 10
вы хотя-бы укажите сервер баз данных, который используете
0
select @Available = 1 where (select count(*) from Numbers) <= @MaxAmount and not exists (select top 1 1 from Numbers where ID = @ID)
СУБД принял за SQL Server. Задача настолько легка, что не танет ни на какие звездочки.
СУБД принял за SQL Server. Задача настолько легка, что не танет ни на какие звездочки.
+1
НЛО прилетело и опубликовало эту надпись здесь
Вы правы, с вложенными запросами все действительно тривиально. Зубры SQL до появления оператора CASE ваяли нечто вроде этого:
SELECT @Available = SIGN(1 + SIGN(COUNT(*) - @MaxAmount)))*(1 - ABS(SIGN(SUM(1 - SIGN(ABS(ID - @ID))))))
FROM Numbers
SELECT @Available = SIGN(1 + SIGN(COUNT(*) - @MaxAmount)))*(1 - ABS(SIGN(SUM(1 - SIGN(ABS(ID - @ID))))))
FROM Numbers
0
отец :) только перемудрил вроде :)
SELECT
@Availability = 1
FROM
#TestCount
HAVING
COUNT(ID) < @MaxAmount
AND SUM(ABS(SIGN(ID — @ID))) = COUNT(ID)
SELECT
@Availability = 1
FROM
#TestCount
HAVING
COUNT(ID) < @MaxAmount
AND SUM(ABS(SIGN(ID — @ID))) = COUNT(ID)
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
SQL-задачка