Какой самый эффективный и гибкий способ генерировать комбинации в TSQL? - PullRequest
1 голос
/ 10 мая 2010

Какой самый эффективный и гибкий способ генерировать комбинации в TSQL? Под «Гибким» я имею в виду, что вы сможете легко добавлять правила комбинирования. например: для создания комбинаториев из 'n' элементов, сортировки, удаления дубликатов, получения комбинаторий, в которых каждый приз принадлежит другой лотерее и т. д.

Например, наличие набора номеров, представляющих лотерейные призы.

Number | Position | Lottery
---------------------------
 12    | 01       | 67
 12    | 02       | 67
 34    | 03       | 67
 43    | 01       | 89
 72    | 02       | 89
 33    | 03       | 89

(я включаю столбец позиции, потому что число может быть повторено среди различных призов лотереи)

Я хотел бы создать такие комбинатории, как:

Numbers | Lotteries
-------------------
 12 12  | 67 67
 12 34  | 67 67
 12 34  | 67 67
 12 43  | 67 89
 12 72  | 67 89
 12 33  | 67 89

        .
        .
        .

Ответы [ 2 ]

2 голосов
/ 10 мая 2010

Это называется CROSS JOIN:

SELECT
    CAST(T1.Number AS VARCHAR) + ' ' + CAST(T2.Number AS VARCHAR) AS Numbers,
    CAST(T1.Lottery AS VARCHAR) + ' ' + CAST(T2.Lottery AS VARCHAR) AS Lottery
FROM table1 T1
CROSS JOIN table1 T2
ORDER BY Numbers
1 голос
/ 11 мая 2010

Более сложный подход заключается в использовании F #, чтобы пользователь мог писать уравнения с использованием языка, специфичного для предметной области.

Для примера использования F # вы можете увидеть окончательный комментарий в этом блоге:

http://cs.hubfs.net/forums/thread/4496.aspx

Причина в том, что вам нужно будет найти простой способ выполнения вычислений, написанных пользователем, но другой вариант заключается в использовании C # и структуры Entity-Attribute-Value (* 1009). * так что вы можете иметь гибкую систему, в которой пользователь может создавать уравнения для различных типов лотерей или различные правила.

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

...