2015-12-16 36 views
0

我有非常基本的SQL體驗,並且一直堅持這個SQL問題幾天。 我有2張桌子。我需要將3列信息從一個表格移動到另一個表格。使用插入,內部連接並忽略/跳過空值

表A,我正在將信息移動到的表中有8個列,其中3個設置爲不接受空值。

我該如何移動3列並跳過或在要求值的列中插入'0'?

我正在使用MS SQL server 2005 express。 這是我到目前爲止有:

INSERT INTO account (sSurname, sName, sIdNo) 
SELECT Client.LASTNAME, Client.FIRSTNAME, Client.DATEOFBIRTH 
FROM Client 
INNER JOIN Account__MEMBER 
ON Account__MEMBER.AccountKEY=Client.AccountKEY 
ORDER BY Client.LASTNAME; 

我試圖研究這個,但整個有用的東西還沒有來。

+0

什麼是不支持空值的列名? – Mukund

+0

他們是 - 帳戶號碼 AccDate CurrentAddress –

回答

0

使用ISNULL,如果你的目標是要插入一些默認值..

INSERT INTO account (sSurname, sName, sIdNo) 
SELECT 
     ISNULL(Client.LASTNAME, 0) AS sSurname 
     ,ISNULL(Client.FIRSTNAME,0) AS sName 
     ,ISNULL(Client.DATEOFBIRTH,0) AS sIdNo 
FROM Client 
INNER JOIN Account__MEMBER 
ON Account__MEMBER.AccountKEY=Client.AccountKEY 
ORDER BY Client.LASTNAME; 

如果您想篩選出空的,然後使用where子句

WHERE Client.LASTNAME IS NOT NULL OR COLUMN2 IS NOT NULL... 

如果你想更新的嘗試像這樣的東西。

UPDATE account 
sSurname= Client.LASTNAME 
,sName= Client.FIRSTNAME 
,sIdNo= Client.DATEOFBIRTH 
FROM Client C 
    INNER JOIN Account__MEMBER AM ON AM.AccountKEY=C.AccountKEY 
    WHERE -- FILTER COLUMNS THAT ARE NULL 
    --E.G. AM.ID IS NOT NULL OR c.LASTNAME IS NOT NULL 
+0

嗨 感謝您的回覆。 我有sSurname,sName,sIdNo的值。這不是問題 我需要的是如何在更新sSurname,sName,sIdNo值時跳過另一列中的空值或使其他列爲0? 謝謝 –

0

解決方案1:

INSERT INTO account (sSurname, sName, sIdNo, AccountNo, AccDate, CurrentAddress) 
SELECT Client.LASTNAME, Client.FIRSTNAME, Client.DATEOFBIRTH, 0 AS 'AccountNo', 
GetDate() as 'AccDate', 'N/A' as 'CurrentAddress' 
FROM Client 
INNER JOIN Account__MEMBER 
ON Account__MEMBER.AccountKEY=Client.AccountKEY 
ORDER BY Client.LASTNAME; 

解決方案2:

您可以添加任何你想要的這些列在列屬性中 的Sql Server Management Studio中的默認值。

+0

@ M-Corp讓我知道它是否有效。 – Mukund

+0

非常感謝! –

+0

抱歉再次擔心,但我得到一個 '錯誤轉換數據類型varchar到bigint'錯誤? 其上線1。 AccountNo被設置爲bigint ..任何我可以做的事情? 我真的不想幹涉表A上的設置.. –