Как я могу реализовать функцию COMBIN Excel в SQL 2005, либо в процедуре хранения или в функции. О функции COMBIN в Excel следуйте этому Ссылка .
Спасибо.
Либо реализуйте функцию факториала, либо в зависимости от вашего возможного диапазона ввода сохраните результаты факториала в таблице.
Реализуйте формулу, как показано в вашей ссылке.
Нет встроенного метода для этого, вам нужно будет сделать пользовательскую функцию, определенную пользователем.
Вместо того, чтобы делать что-то сумасшедшее, например рекурсивно-факториальное (как видно из этого обсуждения на форуме ), я бы сделал следующее:
Создайте таблицу поиска факториала, содержащую предварительно рассчитанные факториальные значения (может быть от 1! До 100 !, поскольку 100! Больше 9,3 × 10 ^ 157), или столько, сколько вы думаете. *
Затем в своей пользовательской функции просто найдите n!, k!, and (n-k)! из таблицы и вычислите (n!) / (k!) * (n-k)!
n!, k!, and (n-k)!
(n!) / (k!) * (n-k)!
Предварительный расчет кажется более разумным, но решение без него.
declare @n int declare @k int SET @n = 8 SET @k = 2 SELECT POWER(10.0, SUM(CASE WHEN Number > (@n - @k) THEN LOG10(Number) ELSE 0 END))/ POWER(10.0, SUM(CASE WHEN Number <= @k THEN LOG10(Number) ELSE 0 END)) FROM master.dbo.spt_values WHERE type='P' AND ((Number > 0 and Number <= @k) OR (Number > (@n - @k) AND Number <= @n))
В зависимости от того, какими будут ваши возможные входные значения, возможно, стоит предварительно рассчитать значения и сохранить их в таблице; получение COMBIN(n, k) будет таким же простым, как и
COMBIN(n, k)
SELECT value FROM Combin WHERE n = @n AND k = @k