2017-04-10 5 views
0

T-SQLに暗黙的に1つ以上のテーブルを結合する方法はありますか?私はSASのバックグラウンドから来ています。異なる数のカラムと名前を持つ複数のテーブルをスタックしたいのであれば、SASはcol xがテーブルyにないことを知るのに十分にスマートでした。 SAS書類(例1を参照)から、例えばT-Sql 1つ以上のテーブルを暗黙的に結合しますか?

、これら2つのテーブルを結合する SAS Example

OBS Common Animal Number  OBS Common Plant  Number 

1  a  Ant  5   1  g  Grape  69 
2  b  Bird     2  h  Hazelnut 55 
3  c  Cat  17   3  i  Indigo  . 
4  d  Dog  9   4  j  Jicama  14 
5  e  Eagle     5  k  Kale   5 
6  f  Frog  76   6  l  Lentil  77 

は同じくらい簡単です:T-SQLで

data concatenation; 
    set animal plant; 
run; 

私が持っているすべてこれまでSELECTステートメントのすべての値を明示的にリストしてnullにすることができました。

ので、同様に、例えば、(A):植物や動物のテーブルが同じカラム名を持っていた場合

select obs, common, animal, null as plant, number 
from animal 
union all 
select obs, common, null as animan, plant, number 

今では一例として、簡単だろう(B):

select * from plants 
union all 
select * from animals 

今、私の質問は、SASの例ほど簡単なT-SQLとの不一致テーブルを結合する方法があるか、または例(a)のような不一致を明示的に定義する必要があるかどうかです。

+0

それはそんなにカラム名ではありません - しかし、UNIONのためにあなたは、同じ数の列を持っている必要があり、列が最初のSELECTの対応するカラムと同じデータ型でなければなりません。 – scsimon

+1

例題aであなたの答えがあることを確かめてください。私はsqlに相当するものはないと思います。 – Simon

答えて

0

SQL Serverには同等の機能はありませんので、例(a)を使用する必要があります。

すべてのフィールドのデータ型が同じであることを確認する必要があります。
変換(またはキャスト)関数を使用して、例(a)を機能させてみてください。
私はあなたのデータ型を知っていないので、あなたは正しいデータ型でこの例を適用することができます。

select convert(int, obs), 
     convert(nvarchar, common), 
     convert(nvarchar, animal), 
     convert(nvarchar, null) as plant, 
     convert(decimal(16,2), number) 
from animal 
union all 
select convert(int, obs), 
     convert(nvarchar, common), 
     convert(nvarchar, null) as animal, 
     convert(nvarchar, plant), 
     convert(decimal(16,2), number) 
from plant 
0

私の印象はノーです。

可能なすべての列を持つ既存の表がある場合は、INSERTを使用して列のサブセットを含む表のレコードを追加できます。

insert into concatenation (Common,Animal,Number) 
    select Common,Animal,Number from animals 
; 
insert into concatenation (Common,Plant,Number) 
    select Common,Plant,Number from plants 
; 
関連する問題