2009-08-21 2 views
0

N1, N2, N3 열이있는 표가있는 경우 N1 + N2 + N3> 10 조건을 만족하는 모든 조합을 어떻게 얻을 수 있습니까?조건을 만족하는 모든 조합을 얻는 방법

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

가 어떻게 T-SQL에서이 작업을 수행 할 수 있습니다

 N1  N2  N3 
Row1 1  5  4 
Row2 4  4  3 

이 결과를 제공해야합니다 : 예를 들어

테이블을 쿼리?

+0

4/5/3 무엇 : 나는 '가입'구문이 인수를 발견? – Bombe

+0

예, 그 중 하나를 놓 쳤습니다. 죄송합니다 – erik

답변

3

테스트하지는 않았지만이 기능이 작동해야합니다. 크로스 조인은 모든 조합을 제공하며 조건을 충족시키는 조합 만 반환하도록 필터링 할 수 있습니다. DISTINCT에는 중복 된 조합을 필터링 할 수 있습니다. 즉 3 개의 모든 열이 한 행에 동일한 값을 갖는 경우 발생할 수 있습니다. 내가 제대로 이해했다면

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; 
+0

이 예제에서 중첩 된 선택은 불필요하며, Ed Harper의 구문은 더 간단합니다. –

1

, 당신은 가치가 발생하는 행에 관계없이> (10)를 추가 N1, N2 및 N3의 모든 조합을합니다.

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

이것은 데카르트 제품이 유효한 대답 일 때의 극소수의 예 중 하나입니다.

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

내가 십자가 가입 구문에 익숙하지 해요,하지만 모두 잘 작동하는 것 같다 다음과 같이 내가 노력

내 쿼리입니다.

편집 : https://stackoverflow.com/questions/128965/is-there-something-wrong-with-joins-that-don't-use-the-join-keyword-in-sql-or-mys

+0

더 현대적인 구문이 전부입니다. 당신이 말했듯이, 조인을 지정하지 않으면 (똑같이) 데카르트 제품과 동일한 결과를 얻을 수 있습니다. 예를 들어 세 개의 테이블이 A 내부 B 교차점 C에 조인 되었다면, 교차점을 명시 적으로 말하면서 무슨 일이 일어나는지 알 수 있습니다. – AakashM

+0

AakashM에게 감사드립니다. 다른 독자들에게는 교차 결합을 사용하고 링크를 추가하는 이유에 대해 묻는 첫 번째 주석을 삭제했습니다. –

관련 문제