Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
__Iriska__
Member

Откуда:
Сообщений: 21
Всем привет!
Допустим есть массив значений, из этого массива нужно вывести те значения, которые составляют нужную сумму, допустим 100?
28 ноя 13, 22:10    [15208592]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1528
__Iriska__,

для начала разъясните что есть массив в приложении к MS SQL, в котором нет такого понятия как "массив".
28 ноя 13, 22:41    [15208714]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
__Iriska__
Member

Откуда:
Сообщений: 21
Sergey Sizov, массив, есть числа: 25, 37, 40, 55, 60... в примере из двух чисел можно получить сумму равную 100 (40 и 60)
28 ноя 13, 22:45    [15208732]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
select значения from массив group by значения having SUM(значения)=100
28 ноя 13, 22:55    [15208775]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
SERG1257
Member

Откуда:
Сообщений: 2752
Если только двух значений то выполните декартово произведение сложите два значения выберите сумму.

select a.val, b.val from myTable a 
cross join myTable b
where a.val +  b.val = summa

Отдельный вопрос по дубликатам, можно добавить условие a.id<>b.id

для трех значений надо выполнить декартово произведение три раза, и т.д
28 ноя 13, 23:12    [15208848]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
>Отдельный вопрос по дубликатам, можно добавить условие a.id<>b.id
Во первых, у всловии задачи ID нет. Во вторых, <> по ID не отсеит дубликаты

DECLARE @T TABLE (N tinyint)

INSERT INTO @T 
  SELECT 25 
  UNION ALL SELECT 75 
  UNION ALL SELECT 50 
  UNION ALL SELECT 50 
  UNION ALL SELECT 42 
  UNION ALL SELECT 0
  UNION ALL SELECT 100 


SELECT DISTINCT 
  SS.N1, SS.N2 
FROM
  (
  SELECT 
     T1.N AS N1 
    ,T2.N AS N2 
  FROM @T T1 
    CROSS JOIN @T T2 
  WHERE 
    T2.N + T1.N = 100 
    AND T1.N >= T2.N
  ) SS

   
  
29 ноя 13, 12:57    [15211460]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Воу, селект фром селкт затесался от другого решения.

 
   SELECT DISTINCT 
     T1.N AS N1 
    ,T2.N AS N2 
  FROM @T T1 
    CROSS JOIN @T T2 
  WHERE 
    T2.N + T1.N = 100 
    AND T1.N >= T2.N
 
29 ноя 13, 13:00    [15211471]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
а что, если искомая сумма состоит из пяти чисел исходного массива?
100=1+17+25+27+30 ??
29 ноя 13, 13:28    [15211718]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
> вывести пары
> пяти чисел

0_o
29 ноя 13, 13:31    [15211753]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Cammomile
> вывести пары
> пяти чисел

0_o

Старттопик:
__Iriska__
Всем привет!
Допустим есть массив значений, из этого массива нужно вывести те значения, которые составляют нужную сумму, допустим 100?
29 ноя 13, 13:33    [15211779]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Я-то ответил на пост SERG1257, где он выводит пары.
29 ноя 13, 13:39    [15211865]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33991
Блог
думаю, автору топика нужно уточнять алгоритм, ведь возможны и такие ситуации:

1,1,1,99,99,99, 2,98, 33,33,33,1 ..., 1

ps единичек в массиве ровно 100 штук )
29 ноя 13, 13:41    [15211895]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
if object_id('tempdb..#massiv') is null begin
	create table #massiv (id int identity, val int)
	insert #massiv (val) values 
	   (1),(1),(20),(10),(5),(80),(7),(11),(90)
end

select * from #massiv

;WITH Summa AS (
   SELECT m.val, m.id, m.val summa, CONVERT(varchar(max),m.val) calc
      FROM #massiv m
      where m.val<=100
   union all
   select m.val, m.id, s.summa+m.val, CONVERT(varchar(max),s.calc + '+' + CONVERT(varchar(max),m.val)) calc
      from Summa s
      join #massiv m on m.val>s.val or m.val=s.val and m.id>s.id
      where s.summa+m.val<=100
   )
SELECT * 
FROM Summa s
where s.summa=100
validsummacalc
90910010+90
80610020+80
8061001+1+7+11+80
29 ноя 13, 13:45    [15211947]     Ответить | Цитировать Сообщить модератору
 Re: Как вывыбрать значения сумма которых составляет определённую сумму!?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Поправка:
if object_id('tempdb..#massiv') is null begin
	create table #massiv (id int identity, val int)
	insert #massiv (val) values 
	   (1),(1),(20),(10),(5),(80),(7),(11),(90),(1),(2)
end

-- select * from #massiv

;WITH Summa AS (
   SELECT m.val, m.id, m.val summa, CONVERT(varchar(max),m.val) calc
      FROM #massiv m
      where m.val<=100
   union all
   select m.val, m.id, s.summa+m.val, CONVERT(varchar(max),s.calc + '+' + CONVERT(varchar(max),m.val)) calc
      from Summa s
      join #massiv m on m.val>s.val or m.val=s.val and m.id>s.id
      where s.summa+m.val<=100
   )
SELECT distinct s.calc
FROM Summa s
where s.summa=100
calc
1+1+1+2+5+10+80
1+1+1+2+5+90
1+1+1+7+10+80
1+1+1+7+90
1+1+2+5+11+80
1+1+7+11+80
1+2+7+10+80
1+2+7+90
10+90
2+7+11+80
20+80
29 ноя 13, 13:53    [15212037]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить