Как получить все комбинации, удовлетворяющие условию - PullRequest
0 голосов
/ 21 августа 2009

Для таблицы, таблицы, со столбцами N1, N2, N3, как я могу получить все комбинации, удовлетворяющие условию N1 + N2 + N3> 10?

Например, запрос к таблице:

       N1      N2      N3
Row1   1       5       4
Row2   4       4       3

Должен дать результат:

       N1      N2      N3
Row1   4       5       4
Row2   4       4       4
Row3   4       4       3
Row3   4       5       3

Как я могу сделать это в T-SQL?

Ответы [ 3 ]

3 голосов
/ 21 августа 2009

Я не проверял это, но что-то вроде этого должно работать. Перекрестное объединение даст вам все комбинации, и вы отфильтруете их, чтобы вернуть только те, которые удовлетворяют вашему условию. DISTINCT предназначен для фильтрации повторяющихся комбинаций, которые могут возникнуть, если все три столбца имеют одинаковое значение в одной строке.

SELECT DISTINCT T1.N1, T2.N2, T3.N3
FROM
    (SELECT N1 FROM YourTable) AS T1
        CROSS JOIN
    (SELECT N2 FROM YourTable) AS T2
        CROSS JOIN
    (SELECT N3 FROM YourTable) AS T3
WHERE T1.N1 + T2.N2 + T3.N3 > 10;
1 голос
/ 21 августа 2009

Если я вас правильно понял, вы хотите, чтобы все комбинации N1, N2 и N3 составляли> 10, независимо от того, в какой строке встречаются значения.

create table #t
(N1 int
,N2 int
,N3 int
)


insert #t
select 1,5,4
union select 4,4,3


select n1.N1, n2.N2, n3.N3
from #t as n1
cross join #t as n2
cross join #t as n3
where n1.N1 + n2.N2 + n3.N3 > 10
0 голосов
/ 21 августа 2009

Это один из немногих примеров, когда декартово произведение является правильным ответом.

Мой запрос, который я пробовал, выглядит следующим образом:

select distinct t1.t1, t2.t2, t3.t3
from test t1, test t2, test t3
where (t1.t1 + t2.t2 + t3.t3) > 10

Я не знаком с синтаксисом перекрестного соединения, но оба они работают нормально.

Редактировать: Я нашел этот аргумент для синтаксиса 'Join': /143180/chto-to-ne-tak-s-soedineniyami-kotorye-ne-ispolzuyt-klychevoe-slovo-join-v-sql-ili-mysql't-use-the-join-keyword-in-sql-or-mys

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...