Как реализовать функцию Excel COMBIN в SQL - PullRequest
2 голосов
/ 03 июня 2010

Как я могу реализовать функцию COMBIN Excel в SQL 2005, либо в процедуре хранения или в функции. О функции COMBIN в Excel следуйте этому Ссылка .

Спасибо.

Ответы [ 4 ]

3 голосов
/ 03 июня 2010
  1. Либо реализуйте функцию факториала, либо в зависимости от вашего возможного диапазона ввода сохраните результаты факториала в таблице.

  2. Реализуйте формулу, как показано в вашей ссылке.

1 голос
/ 03 июня 2010

Нет встроенного метода для этого, вам нужно будет сделать пользовательскую функцию, определенную пользователем.

Вместо того, чтобы делать что-то сумасшедшее, например рекурсивно-факториальное (как видно из этого обсуждения на форуме ), я бы сделал следующее:

  • Создайте таблицу поиска факториала, содержащую предварительно рассчитанные факториальные значения (может быть от 1! До 100 !, поскольку 100! Больше 9,3 × 10 ^ 157), или столько, сколько вы думаете. *

  • Затем в своей пользовательской функции просто найдите n!, k!, and (n-k)! из таблицы и вычислите (n!) / (k!) * (n-k)!

0 голосов
/ 03 июня 2010

Предварительный расчет кажется более разумным, но решение без него.

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))
0 голосов
/ 03 июня 2010

В зависимости от того, какими будут ваши возможные входные значения, возможно, стоит предварительно рассчитать значения и сохранить их в таблице; получение COMBIN(n, k) будет таким же простым, как и

SELECT value FROM Combin WHERE n = @n AND k = @k
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...