2017-01-13 1 views
0

SQL Server에서 두 테이블의 쿼리가 두 개 있습니다.두 개의 관련 SQL 쿼리의 출력 병합

첫 번째 테이블 'Values1'에는 'index1'과 'value1'이라는 두 개의 열이 있습니다. 두 번째 테이블 인 'Values2'에는 'index2'및 'value2'열이 있습니다.

인덱스 값 'd1'과 'd2'의 쌍에 대해 'index1'및 'value1'행을 'd1'과 'd2'사이의 해당 index1과 함께 출력 할 수있는 쿼리를 원합니다. 첫 번째 쿼리의 결과로 주어진 'd1'과 'value1'사이의 'index2'값을 갖는 'Values2'테이블의 행 수 및 두 번째 쿼리가 첫 번째 쿼리의 결과를 반복하도록합니다.

index1:value1 
10:'A' 
20:'B' 
30:'C' 
40:'D' 
50:'E' 

둘째 표이다 : 따라서 첫 번째 테이블 인 경우

20,B,3 
30,C,4 

방법 D1위한

index2:value2 
0:'F' 
5:'G' 
15:'H' 
25:'I' 
35:'J' 

쿼리 = 18, D2 = 32, 초래할 것 이런 종류의 결과를 내기 위해 두 개의 쿼리를 결합 할 수 있습니까?

+2

그래서 당신은'index2'는'18'와' 'B'' 사이 Values2''의 행 수를 계산하려면? 그게 어떻게 이해가 되니? – melpomene

+0

왜 이것이 단일 쿼리 여야합니까? 여러 행을 반환 할 수있는 쿼리와 두 개만 반환하는 쿼리가 있고 서로간에 관계가없는 것처럼 느껴집니다. 첫 번째 테이블에 '25': 'Q' '가 있으면 어떻게 될지 생각해보십시오. 그러면 어떻게됩니까? – Schwern

답변

0

당신이 원하는 것 :

select t1.index1, t1.value1, count(*) 
from t1 join 
    t2 
    on t2.value2 between @d1 and t1.value1 
where t1.value1 between @d1 and @d2 
group by t1.index1, t1.value1; 
0
Select * 
From (
     Select index1 as [index],value1 as value 
     From (Values (10,'A'),(20,'B'),(30,'C'),(40,'D'),(50,'E'))as Temp(index1,value1) 

     Union 
     Select index2 as [index],value2 as value 
     From (Values (0,'F'),(5,'G'),(15,'H'),(25,'I'),(35,'J')) as Temp(index2,value2) 
     ) D1 
Where D1.[index] between 18 and 32 
order by [index] 
0

귀하의 질문은 약간 불분명하다. values1 기록을 얻으려면 간단하다 : 두 번째 부분에 관해서는

select * from values1 where index1 between @d1 and @d2; 

: 당신은 당신이 단순히 어디 index2 <= index1 기록을 계산 할 것 같다 테이블 values2하고 설명을 모순의 레코드를 계산합니다.

select count(*) from values2 where index2 <= @index1 

두 개의 결합 :

select 
    index1, 
    value1, 
    (select count(*) from values2 v2 where v2.index2 <= v1.index1) as cnt 
from values1 v1 
where index1 between @d1 and @d2;