edy 26 июн 2007 в 13:07SQL-задачкаВремя на прочтение1 минКоличество просмотров2KЧуланВсего голосов 17: ↑12 и ↓5+7Добавить в закладки2Комментарии10
edy 26 июн 2007 в 14:16Показать предыдущий комментарийя MS SQL, вы можете решить для того, который используете сами.
DEL 26 июн 2007 в 14:18select @Available = 1 where (select count(*) from Numbers) <= @MaxAmount and not exists (select top 1 1 from Numbers where ID = @ID) СУБД принял за SQL Server. Задача настолько легка, что не танет ни на какие звездочки.
worker4food 26 июн 2007 в 16:21Показать предыдущий комментарийВы правы, с вложенными запросами все действительно тривиально. Зубры SQL до появления оператора CASE ваяли нечто вроде этого: SELECT @Available = SIGN(1 + SIGN(COUNT(*) - @MaxAmount)))*(1 - ABS(SIGN(SUM(1 - SIGN(ABS(ID - @ID)))))) FROM Numbers
edy 26 июн 2007 в 16:40Показать предыдущий комментарийотец :) только перемудрил вроде :) SELECT @Availability = 1 FROM #TestCount HAVING COUNT(ID) < @MaxAmount AND SUM(ABS(SIGN(ID — @ID))) = COUNT(ID)
edy 26 июн 2007 в 16:53Показать предыдущий комментарийsum(id=@ID) недопустимая конструкция, т.к. boolean в SQL нельзя ни к чему привести. то же самое с умножением.
SQL-задачка