1

2 つのテーブルを使用SELECTする a と共にステートメントがあります。joinテーブルShell とテーブルがありますTanker

こんな感じselect S.*, T.* from shell S left outer join tanker T on S.id = T.idです。約 183 のフィールドがあることに注意してください。Tanker

だから私は次のデータを取得します

     ====Shell table==== =========Tanker table columsn======================   
    orgid  org eli lang orgid   org     Lang    {Other columns start}
    906875  s   1   1   NULL    NULL    NULL    NULL    NULL    NULL    NULL
    906876  s   2   2   NULL    NULL    NULL    NULL    NULL    NULL    NULL
    906877  b   2   1   NULL    NULL    NULL    NULL    NULL    NULL    NULL
    906878  s   1   1   NULL    NULL    NULL    NULL    NULL    NULL    NULL
    906879  b   2   1   NULL    NULL    NULL    NULL    NULL    NULL    NULL

次に、orgid、org、lang、およびその他の 183 フィールドを選択します。だから今私はそうしています select T.* FROM .... が、これに関する問題は、、、、を選択するとorgidorgNULLのみが取得されることです。私は選択しているだけで、左結合であるため、当然これらはnullになるため、これは理にかなっています。langeliT.*

ただし、私の目的では、それらがシェル テーブルの値である必要があります。つまり、シェルから orgid、org、eli、lang を選択してから、Tanker から残りを選択したいと考えています。私はこれを行う1つの方法は次のとおりであることを知っています

select s.orgid, s.org, s.eli, s.lang, t.column, t.column2, t.column3

Tanker Tしかし、ほぼ200列あることを思い出してください。スクリプトに 200 列を書きたくありません。

そこで質問です。

orgid、org、eli、lang の値 (つまり、実際の非 null 値) を null の列に「コピー」する方法はありますか? そうすればselect T.*、200 列すべてを選択することができます。

本当に混乱している場合、私が探している最終結果は

    ====Shell table==== =========Tanker table columsn======================    
    orgid  org eli lang orgid   org     Eli Lang    {Other columns start}
    906875  s   1   1   906875  s        1  1       NULL    NULL
    906876  s   2   2   906876  s        2  2       NULL    NULL    NULL
    906877  b   2   1   906877  b        2  1       NULL    NULL
    906878  s   1   1   906878  s        1  1       NULL    NULL    NULL
    906879  b   2   1   906879  b        2  1       NULL    NULL    NULL
4

2 に答える 2

1

この場合、この選択を実行するビューを作成することをお勧めします。この種の機能が必要な場合はいつでも再利用できます。変更が必要になった場合は、ビューを更新するだけです (ただし、そのビューに対して機能する基本的なロジックがないことに注意する必要があります)。

これを簡単に行うには、実際に SSMS からクエリ ウィンドウにテーブルをクリック アンド ドラッグします。問題のテーブルの下にある [列] フォルダーをクリックしてクエリ ウィンドウにドラッグするだけで、すべての列がそこにコピーされます。そうすれば、すべてを入力しなくても、手動で選択を行うことができます。

于 2012-06-07T14:36:25.777 に答える
0

Isnull (SQL サーバー) を使用できます。選択している列が null の場合に使用する値を指定できます。

select isnull(t.org, s.org) as org

T に値がある場合はそれが返され、そうでない場合は S の値が返されます

編集:

SPFiredrake は、私が間違った部分に注目したことを指摘しました。あなたができるもう1つのこと(あなたが心配しているのが巨大なSQLスクリプトである場合)は、Tから*を選択し、次にSから必要な数列だけを選択し、次に使用する言語で比較のロジックを処理することですデータ。

于 2012-06-07T14:27:58.880 に答える