给定具有列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中执行此操作?
答案 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