Комментарии 10
вы хотя-бы укажите сервер баз данных, который используете
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. Задача настолько легка, что не танет ни на какие звездочки.
Вы правы, с вложенными запросами все действительно тривиально. Зубры 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
отец :) только перемудрил вроде :)
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)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
SQL-задачка