如何让所有组合满足条件

时间:2009-08-21 07:34:17

标签: sql tsql

给定具有列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 个答案:

答案 0 :(得分:3)

我没有测试过,但是这样的事情应该有效。交叉连接将为您提供所有组合,并过滤它们以仅返回满足您条件的组合。 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 :(得分:1)

如果我理解正确的话,你想要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

答案 2 :(得分:0)

这是笛卡尔积是有效答案的极少数例子之一。

我尝试的查询如下:

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

我不熟悉Cross Join语法,但两者似乎都运行良好。

编辑:我发现了“加入”语法的这个参数:https://stackoverflow.com/questions/128965/is-there-something-wrong-with-joins-that-don't-use-the-join-keyword-in-sql-or-mys