2016-09-02 6 views
0

私はここに新しいです、そして質問があります。何か助けてくれてありがとう。TSQLデータセットの完成

データセットが不完全で、2番目のセットの値に基づいて完成させたいと思います。

MSSQL 2014を使用してこれを行うにはどうすればよいですか?

これは、例えばデータセットを生成するためのコードです:

DECLARE @T1 TABLE (K1 INT , K2 INT, K3 INT) 
DECLARE @T2 TABLE (K4 INT) 

INSERT INTO @T1 (k1,k2,k3) VALUES 
    (3, 226, 5),(3, 226, 10 
),(3, 226, 15),(3, 226, 20 
),(3, 312, 5),(3, 312, 10 
),(3, 312, 30),(4, 280, 20 
),(4, 280, 25),(4, 280, 50 
),(4, 280, 55) 

INSERT INTO @T2 VALUES (0),(5),(10),(15),(20),(25),(30),(35),(40),(45),(50),(55) 

SELECT * FROM @T1 
SELECT * FROM @T2 

私はこの結果を得るにはどうすればよいですか?

3 226 5 
3 226 10 
3 226 15 
3 226 20 
3 226 25 
3 226 30 
3 226 35 
3 226 40 
3 226 45 
3 226 50 
3 226 55 
3 312 5 
3 312 10 
3 312 15 
3 312 20 
3 312 25 
3 312 30 
3 312 35 
3 312 40 
3 312 45 
3 312 50 
3 312 55 
4 280 0 
4 280 5 
4 280 10 
4 280 15 
4 280 20 
4 280 25 
4 280 30 
4 280 35 
4 280 40 
4 280 45 
4 280 50 
4 280 55 

すべてのキー(t1.k1、t1.k2)事前に、t1.k1から正しい値を供給欠落行(t2.k4ではないt1.k3中)t1.k2

感謝を追加するための

+0

希望の結果を得るための最良の方法を教えてください。 –

答えて

1

2番目のデータセットが完全であることが保証されており、あなたの最初のk1とk2列はK4の行ごとに同じであることが保証されている、あなたは完全にK3にあるものを無視することができた場合:

DECLARE @T1 TABLE (K1 INT , K2 INT, K3 INT) 
DECLARE @T2 TABLE (K4 INT) 

INSERT INTO @T1 (k1,k2,k3) VALUES 
    (3, 226, 5),(3, 226, 10 
),(3, 226, 15),(3, 226, 20 
),(3, 312, 5),(3, 312, 10 
),(3, 312, 30),(4, 280, 20 
),(4, 280, 25),(4, 280, 50 
),(4, 280, 55) 

INSERT INTO @T2 VALUES (0),(5),(10),(15),(20),(25),(30),(35),(40),(45),(50),(55) 

SELECT * 
FROM (select distinct k1, k2 from @T1) T1 
    cross join @T2 
order by 1,2,3 
0

ウィルこのような何か:

SELECT DISTINCT K1, K2, K4 FROM @T2 T2 cross JOIN @T1 T1 
ORDER BY K1 
0

クロスジョイントを使用してください:

select t1.k1, t1.k2, t2.k4 
from (select distinct k1, k2 from @t1) t1 cross join 
    @t2 t2;