使用insert,inner join和ignore / skip over nulls

时间:2015-12-16 11:37:41

标签: sql-server

我有非常基本的SQL体验,并且已经坚持了几天这个SQL问题。 我有2张桌子。我需要将3列信息从一个表移动到另一个表。

表A,表I将移动信息转换为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;

我试图对此进行研究,但没有发现任何有用的东西。

2 个答案:

答案 0 :(得分: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;

如果要过滤掉null,请使用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

答案 1 :(得分: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工作室。