-1

多くの共通フィールドを持つ 2 つのテーブルのビューを作成しようとしています。 ここに画像の説明を入力

両方のテーブルに存在するフィールドは、新しいビューの 1 つのフィールドの下に存在する必要があります。ここでいくつかの投稿を見つけましたが、やりたいことを行うために使用することを提案したものを見失った別の投稿を見つけましたが、私はこれにまったく慣れておらず、答えは少し混乱していUNIONました。衝突しないすべてのフィールドを選択する必要があると思います。次に、テーブルに共通するすべてのフィールドを組み合わせたステートメントから残りを選択しますがFULL OUTER JOIN、どのように機能しますか?dataelongUNION ALLFULL OUTER JOIN

ビュー内の行数を各テーブルの行数の合計と同じに保つために必要だと思いますFULL OUTER JOINが、よくわかりません。

多分これは私の解決策ですか?CROSS JOINただし、 a will が同様のフィールドでどのように機能するかはわかりません。

これらを結合する方法に関心がある方のために、私は両方のテーブルから各行を取得して、それらを新しいビューに配置しようとしています。私の問題は重複したフィールド (c2、footnote1、footnote2 など) が原因です。それらを c2、footnote1、footnote2 のままにしたいのですが、生成されたエイリアスを受け取り続けます。c2 であるすべてのものは、それがどのシートからのものであっても、c2 です。

編集:以下の回答のおかげで、これが私が今書いているものであり、私が欲しいもののようです. ただし、フィールドの数が多いため、永遠にかかります。これを行うより良い方法はありますか?より自動化された何か?

Edit2:これは、将来誰かに役立つ場合に備えて、完全なクエリがどのように見えるかです。時間がかかったので、これを行うためのより自動的な方法があることを願っています。助けてくれたすべての人に感謝します!

SELECT       ID, tableNum, UTC, colNum, c1, c2, null AS c3, c4, colRow, footnote1, footnote2, footnote3, footnote4, 
                                         property, orientation, specimenDesign, exposTempMinF AS exposTempFMin,   exposTempMaxF AS exposTempFMax, 
                                         exposTempRTMinF AS exposTempFRTMin,   exposTempRTMaxF AS exposTempFRTMax, designValueRoomTempF_A, 
                                         designValueRoomTempF_T99                                       , designValueRoomTempF_B                                     , 
                                         designValueRoomTempF_S                                    , designValueRoomTempF_Typical, designValueRoomTempF_Estimate, 
                                         designValueRoomTempF_Units                                         , conversionFactor, null AS form,  null AS thickRangeInMin, null AS thickRangeInMax, 
                                         null AS widthRangeInMin, null AS widthRangeInMax, null AS areaInSqrMin, null AS areaInSqrMax, note
FROM         dbo.[DesignAllowables-Data] AS data 
UNION ALL
SELECT       ID, tableNum, UTC, colNum, null, c2, c3         , null, colRow, footnote1, footnote2, null         , null           , 
                                         property, orientation, specimenDesign, exposTempF_min AS exposTempFMin, exposTempF_max AS exposTempFMax, 
                                         exposTempRTF_min AS exposTempFRTMin, exposTempRTF_max AS exposTempFRTMax, designValueRTF_A AS designValueRoomTempF_A, 
                                         designValueRTF_T99 AS designValueRoomTempF_T99, designValueRTF_B AS designValueRoomTempF_B, 
                                         designValueRTF_S AS designValueRoomTempF_S, null                                                , null                                                , 
                                         designValueRTF_Units AS designValueRoomTempF_Units, conversionFactor, form           , thickRangeInMin              , thickRangeInMax, 
                                         widthRangeInMin           , widthRangeInMax              , areaInSqrMin         , areaInSqrMax             , note
From           dbo.[DesignAllowables-Elong-RA] AS elong
4

2 に答える 2

1

リンク先の質問は、あなたの質問には当てはまりません。

試してみる組み合わせのいくつかの形式を次に示します。

完全外部結合

SELECT 
COALESCE(T1.Col1,T2.Col1) As Col1,
COALESCE(T1.Col2,T2.Col2) As Col2
FROM 
T1
FULL OUTER JOIN
T2
ON T1.ID = T2.ID

ID行を結合するために 一致します。ID両方のテーブルで一意である必要があります。そうしないと、「重複した」行が得られます

ユニオンオール

SELECT 
T.ID,
MAX(T.Col1) As Col1,
MAX(T.Col2) As Col2
FROM
(
SELECT Col1,Col2 FROM T1
UNION ALL
SELECT Col1,Col2 FROM T2
) T
GROUP BY T.ID

IDで効果的に一致

ID が一意でない場合、重複は発生しません。値の組み合わせを任意に選択します

結合されたすべての行を返し、列を選択的に結合する方法は次のとおりです。この例では、C1 はテーブル T1 にのみ存在します。

SELECT C1,C2, C3 
FROM T1
UNION ALL
SELECT NULL, C2,C3 
FROM T2

重要な質問は、各テーブルに一意のキーがあるかどうかです。それに合わせる必要はありますか?

于 2015-10-13T21:59:01.570 に答える