2012-06-07 37 views
1

我有一個SELECT聲明以及使用兩個表的join。我們有表Shell和表Tanker將列值複製到表的另一部分

它看起來像這樣select S.*, T.* from shell S left outer join tanker T on S.id = T.id請注意,Tanker有大約183個字段。

所以我得到以下數據

 ====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,組織,郎,和其他183多個領域。所以現在我做 select T.* FROM .... 但這個問題是,當它選擇orgid,org,langeli它只獲得NULLS。這是有道理的,因爲我只選擇T.*及其左連接,所以自然這些將爲空。

但是,爲了我的目的,我需要它們是shell表中的值。也就是說,我想從Shell選擇orgid,org,eli,lang,然後從Tanker中選擇其餘的。我知道一個辦法,我這樣做是以下

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

回想起那Tanker T近200列。我不想在腳本上寫200列。

所以這裏是問題。

有什麼辦法可以將orgid,org,eli,lang的值(即實際非空值)「複製」到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 
+0

我認爲唯一的方法就是動態sql。您使用的是什麼RDMS?你有什麼嘗試? – Arion

+0

不幸的是,使用*排除列是不容易的。我會推薦的是創建一個視圖來實現這一點,這樣你就可以引用視圖,而不必擔心隨時需要重寫這種類型的腳本。 – SPFiredrake

回答

0

您可以使用ISNULL(SQL服務器)。它允許你提供一個值來使用incase列,你選擇的是null。

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

如果T的值,它給你,否則給你選自S

一個

編輯:

SPFiredrake指出我把重點放在了錯誤的部分。你可以做的另一件事(如果你擔心的是一個巨大的SQL腳本)是從T中選擇*,然後從S中選擇可能需要的幾列,然後處理比較的邏輯,數據。

+1

這不是他想要的。他希望選擇'Tanker'的所有列,只是用'Shell'列替換其中的三個。無可否認,這種技術將在那裏使用,但他特別聲明他不想編寫那麼大的腳本。 – SPFiredrake

+0

D'oh!由於某種原因,將它讀爲行!他仍然需要這樣做,雖然 – Limey

+0

是的,我的意思是,如果我有10左右的柱子,它不壞。但十年前有人認爲把183列放在一張桌子上真是太棒了。確實。 – masfenix

1

在這種情況下,我會建議只編寫一個視圖來執行此選擇,並且您可以在需要這種功能的任何地方重新使用它。你是否需要修改它,這是更新視圖的一個簡單問題(儘管你必須小心,因爲沒有任何基本邏輯與該視圖相對立)。

爲了實現這一點,您可以實際上單擊拖動SSMS中的表格到查詢窗口中。只需點擊拖動相關表格下方的列文件夾到查詢窗口中,它將複製所有列到其中。這樣,您可以手動進行選擇,而無需鍵入所有內容。

相關問題