Сумма всей комбинации в SQL Server без повторения одинаковых значений - PullRequest
0 голосов
/ 17 мая 2019

Эта ссылка обеспечивает близкое решение:

Запрос Sql: Сумма, все возможные комбинации строк в таблице

Логика здесь

n! / k!(n-k)!     where k = 1 to n

Но я хочу, чтобы значения не повторялись

Пример: TEMPTABLE

+----+-------+
| ID | Value |
+----+-------+
| 1  | 5000  |
| 2  | 5000  |
| 3  | 5000  |
| 4  | 5000  |
+----+-------+

Для этой таблицы K должно быть 1, потому что только одним способом вы можете расположить множество

Таким образом, комбинация будет

5000
5000 + 5000 = 10000

5000 + 5000 + 5000 = 15000

5000 + 5000 + 5000 + 5000 = 20000

Всего 4 комбинации

4! / 1!(4-1)! = 4

Для ответа выше комбинация будет

= 4 + 6 + 4 + 1 = 15 

11из них будут одинаковые результаты

Проблема будет в том случае, если будет больше записей, время выполнения будет больше, поэтому я хочу удалить эти повторяющиеся итоги при вычислении итогов.

Может кто-нибудьпожалуйста, помогите.

1 Ответ

0 голосов
/ 17 мая 2019

Просто добавьте отдельную группу или группу, в зависимости от того, что вам нужно

--To get the values
;With selfrec as (
  Select t.Value, t.ID, 0 as Level From #TempTable t
       UNION ALL
  Select t2.Value + t1.Value as Value, t1.ID, Level + 1 From #TempTable t1 
  Inner Join selfrec t2 on t1.ID < t2.ID 
  Where Level < 4 -- limit the number of recursions
)
Select Value 
From selfrec
Group by value 

-- To get the number of combinations 
;With selfrec as (
  Select t.Value, t.ID, 0 as Level From #TempTable t
       UNION ALL
  Select t2.Value + t1.Value as Value, t1.ID, Level + 1 From #TempTable t1 
  Inner Join selfrec t2 on t1.ID < t2.ID 
  Where Level < 4 -- limit the number of recursions
)
Select COUNT(DISTINCT Value) 
From selfrec
...