【问题标题】:Transfer Data from One table to Another Table based on a condition根据条件将数据从一个表传输到另一个表
【发布时间】:2011-04-29 04:37:00
【问题描述】:

我有一个表名 SOURCETABLE,其中包含字段 RollID、SMSID、FName、Lname。 目标表是具有字段 ID、FirstName、LastName 的 DestTable。 我的任务是根据 SOURCETABLE 的数据创建 DestTable,条件如下:

If RollID = NULL
   ID = SMSID
else
   ID = RollID
end if

Fname 将转到 Firstname,Lname 将转到 LastName

我应该写什么陈述?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    应该这样做:

    INSERT INTO DestTable (ID, FirstName, LastName)
       SELECT COALESCE(RollId,SMSID), FName, LName
       FROM SourceTable
    

    您可以在此处了解 COALESCE 的作用:

    http://msdn.microsoft.com/en-us/library/ms190349.aspx

    【讨论】:

    • @Abe Miessler,我对您的代码有一点疑问,COALESCE 是什么意思?到现在为止我还没有解决这个问题。
    • COALESCE 获取您提供的逗号分隔列表中的第一个非空值。所以在上面的例子中,如果RollId 为空,它将使用SMSID
    • 好的,谢谢@Abe Miessler 的回复。我今天有了一个新功能。
    • @Kalyan - 就像 sql 中的空值检查功能。有关它的定义和用法,请参见下面的链接w3schools.com/sql/sql_isnull.asp
    • @Abe Miessler:我也写了答案,但你的答案真的很好,今天我有了一个新功能。
    【解决方案2】:
        INSERT INTO  DestTable (Id, FirstName, LastName)
        SELECT CASE WHEN ISNULL(RollId,'')='' THEN SMSId ELSE RollId END, 
        FName, LName FROM SOURCETABLE
    

    【讨论】:

    • 您好,感谢您的帮助。但是,如果第一个和第二个表中的字段数,则需要写入所有字段,或者我们可以使用 。例如 - INSERT INTO dbo.sms () SELECT CASE when ISNULL(barcode1, '')='' then barcode2 else barcode1 end, * FROM sms_tmp
    • 这比它需要的更复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多