2017-01-13 7 views
0

SQL Serverでは、2つのテーブルから2つのクエリがあります。2つの関連するSQLクエリの出力のマージ

最初のテーブル 'Values1'には、2つのカラム 'index1'と 'value1'があります。 2番目のテーブル 'Values2'には、 'index2'と 'value2'という列があります。

インデックス値 'd1'と 'd2'のペアに対して、 'd1'と 'd2'の間に対応するインデックス1を持つ 'index1'と 'value1'のすべての行を出力できるクエリが必要です。最初のクエリの結果として与えられた 'd1'と 'value1'の間に 'index2'値を持つ 'Values2'テーブルの行の数。そして、2番目のクエリが最初のクエリの結果をループするようにします。

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

そして、2番目の表は、次のとおりです:だから最初の表は、ある場合に

20,B,3 
30,C,4 

方法:D1ため

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

問い合わせは= 18、D2 = 32、になりますこのような結果を得るために2つのクエリを組み合わせることはできますか?

+2

ですから、 'index2'が' 18'と ' 'B''の間にある' Values2'の行数をカウントしたいですか?それはどういう意味ですか? – melpomene

+0

これはなぜ単一のクエリである必要がありますか?任意の数の行を戻すことができる問合せと、2つしか戻さない問合せがあり、お互いに関係がないような感じです。最初のテーブルに '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; 

:あなたがテーブルvalues2のレコードをカウントすると、あなたの説明と矛盾する、あなたが単にindex2 <= index1レコードをカウントしたいようです。

組み合わせ
select count(*) from values2 where index2 <= @index1 

2:

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