Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / получить в зависимости от входящего количества входящих слов, всевозможные комбинации / 11 сообщений из 11, страница 1 из 1
21.02.2022, 14:29
    #40135641
kolyady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
Суть задачи :
на вход приходит строка я ее розбиваю на пробелам на отдельные слова и необходимо на выходе получить всевозможные комбинации с этими словами (для дальнейшего их сравнения).

Тоесть заходит строка:
'word1 word2 word3'

мне нужно получить :
'word1 word2 word3'
'word1 word3 word2'
'word2 word1 word3'
'word2 word3 word1'
'word3 word2 word1'
'word3 word1 word2'

Так как количество слов в входящей строке не статично, необходим механизм для обработки любого количества слов.
...
Рейтинг: 0 / 0
21.02.2022, 14:40
    #40135647
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
kolyady
Суть задачи :
на вход приходит строка я ее розбиваю на пробелам на отдельные слова и необходимо на выходе получить всевозможные комбинации с этими словами (для дальнейшего их сравнения).

Тоесть заходит строка:
'word1 word2 word3'

мне нужно получить :
'word1 word2 word3'
'word1 word3 word2'
'word2 word1 word3'
'word2 word3 word1'
'word3 word2 word1'
'word3 word1 word2'

Так как количество слов в входящей строке не статично, необходим механизм для обработки любого количества слов.


Если результат нужен именно в таком виде (переменное количество полей в резалтсете), то это только через динамический запрос.

коль уж появляется динамический запрос, можно нужное количество раз таблицу со словами присоединить саму на себя и динамически нагенерить условия неравенства полей
...
Рейтинг: 0 / 0
21.02.2022, 14:46
    #40135648
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
kolyady,

такая задача не по "специальности" реляционной СУБД, лучше поискать более подходящее средство для решения.
...
Рейтинг: 0 / 0
21.02.2022, 14:56
    #40135651
kolyady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
msLex,

тут вопрос не в том чтобы возвращалось количество полей равное количеству слов
1) на вход мы получаем одно поле в котором несколько слов '1 2 3 4'
2) на выходе мы также получаем 1 поле но уже в виде таблицы с разными комбинациями
тоесть:
'1 2 3 4'
'2 3 4 1'
'3 4 2 1' и т.д.
...
Рейтинг: 0 / 0
21.02.2022, 14:57
    #40135652
kolyady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
Владислав Колосов,
ну это уже риторический вопрос где правильно это реализовать, по факту нужно реализовать в ms sql
...
Рейтинг: 0 / 0
21.02.2022, 15:10
    #40135656
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
Владислав Колосов
такая задача не по "специальности" реляционной СУБД, лучше поискать более подходящее средство для решения

Почему ж? Вполне банальный cartesian join в количестве, равном количеству слов, плюс условие, чтобы значения всех полей в каждой записи были уникальными - как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
;with cte(s) as (
  select 'word1'
  union all
  select 'word2'
  union all
  select 'word3'
)
select *
from cte e1, cte e2, cte e3
where e1.s<>e2.s and e1.s<>e3.s and e2.s<>e3.s
order by 1,2,3
...
Рейтинг: 0 / 0
21.02.2022, 15:14
    #40135658
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
Сон Веры Павловны
Владислав Колосов
такая задача не по "специальности" реляционной СУБД, лучше поискать более подходящее средство для решения

Почему ж? Вполне банальный cartesian join в количестве, равном количеству слов, плюс условие, чтобы значения всех полей в каждой записи были уникальными - как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
;with cte(s) as (
  select 'word1'
  union all
  select 'word2'
  union all
  select 'word3'
)
select *
from cte e1, cte e2, cte e3
where e1.s<>e2.s and e1.s<>e3.s and e2.s<>e3.s
order by 1,2,3


Только количество слов переменное.
...
Рейтинг: 0 / 0
21.02.2022, 15:16
    #40135660
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
msLex
Только количество слов переменное.

Генерировать запрос динамически.
...
Рейтинг: 0 / 0
21.02.2022, 15:18
    #40135661
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
Сон Веры Павловны
msLex
Только количество слов переменное.

Генерировать запрос динамически.

22436957
...
Рейтинг: 0 / 0
21.02.2022, 15:20
    #40135662
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
msLex

А, ну да, оно самое.
...
Рейтинг: 0 / 0
21.02.2022, 15:37
    #40135668
kolyady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить в зависимости от входящего количества входящих слов, всевозможные комбинации
msLex,

спасибо , вроде должно так заработать :)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / получить в зависимости от входящего количества входящих слов, всевозможные комбинации / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]