2013-04-04 89 views
13

對於我有這種說法SQL INSERT與選擇的情況下表中的值

Insert into TblStuff 
(FullName,Address,City,Zip) 

Select 
Case 
When Middle is Null Then Fname + LName as FullName, 
Else Fname +' ' + Middle + ' '+ Lname as FullName, 
End 
Case 
When Address2 is Null Then Address1 as Address, 
else Address1 +', ' + Address2 as Address, 
End 
City as City, 
Zip as Zip 
from tblImport 

我得到附近關鍵字不正確的語法「爲」

編輯添加到這個問題麻煩些原因,讓我知道是否需要添加新帖子。

我知道下面是一個小小的不同的陳述,但你可以做一個類似於下面的案例聲明?下面的表述甚至有意義嗎?

Insert into TblStuff 
    (NickName,FirstName,MiddleName,Suffix) 

    Case when FirstName IS NULL then 
     NickName as Nickname, 
     IsNULL(FirstName,'''') as FirstName, 
     IsNULL(MiddelName,'''') as MiddleName, 
     IsNULL(NameSuffix,'''') as Suffix, 
    Else 
     IsNull(NickName2,'''') as NickName, 
     IsNULL(FirstName,'''') as FirstName, 
     IsNULL(MiddelName,'''') as Middlename, 
     Case when NameSuffix2 is NULL then 
      IsNULL(NameSuffix,'''')as suffix, 
     Else 
      IsNULL(NameSuffix,'''') + '''', '''' + IsNULL(NameSuffix2,'''') as suffix, 
     End 
    End 
From tblImport 
+0

所有答案的作品,謝謝很多傢伙!我還有一個問題,我不確定是否需要在這篇文章中發表一篇新文章或者只是問一下,但是這裏有。在案例中說我是這樣的工作 – eripey 2013-04-04 22:33:31

回答

12

您在end完成case語句後需要逗號。而且,在case後聲明「爲」去,而不是在它裏面:

Insert into TblStuff(FullName, Address, City, Zip) 
    Select (Case When Middle is Null Then Fname + LName 
       Else Fname +' ' + Middle + ' '+ Lname 
      End) as FullName, 
      (Case When Address2 is Null Then Address1 
       else Address1 +', ' + Address2 
      End) as Address, 
      City as City, 
      Zip as Zip 
    from tblImport 
7

你的情況下內部的別名,它需要的END之外:

Insert into TblStuff (FullName,Address,City,Zip) 
Select 
    Case 
    When Middle is Null 
    Then Fname + LName 
    Else Fname +' ' + Middle + ' '+ Lname 
    End as FullName, 
    Case 
    When Address2 is Null Then Address1 
    else Address1 +', ' + Address2 
    End as Address, 
    City as City, 
    Zip as Zip 
from tblImport 
2

你也可以使用COALESCE而不是CASE表達式。由於串聯什麼NULL的結果是,即使本身,始終是NULL上SQLFiddle

+0

這看起來很喜歡我想要完成的事情,我不知道如何圍繞這個邏輯包裹我的頭,但它的工作原理:)謝謝。我會投你的答案,但我還沒有15。 – eripey 2013-04-04 22:28:53

+0

順便說一句,歡迎來到StackOverflow!你需要閱讀這些文章:接受答案如何工作? http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – 2013-04-06 06:40:55

+0

我知道如何接受答案,但如果我使用每個帖子的位和部分來做出解決方案,該怎麼辦? – eripey 2013-04-24 22:01:11

0

如果FName參數和LName的包含空值,則需要進行特殊處理,以避免不必要的額外前述,尾隨

INSERT TblStuff(FullName,Address,City,Zip) 
SELECT COALESCE(Fname + ' ' + Middle + ' ' + Lname, Fname + LName) AS FullName, 
     COALESCE(Address1 + ', ' + Address2, Address1) AS Address, City, Zip 
FROM tblImport 

演示,和中間空間。另外,如果Address1包含NULL值,則需要進行特殊處理以防止在地址字符串的開頭添加不必要的','。

如果您正在使用SQL Server 2012,那麼你可以使用CONCAT(NULL是爲空字符串自動處理)和IIF:

INSERT INTO TblStuff (FullName, Address, City, Zip) 
SELECT FullName = REPLACE(RTRIM(LTRIM(CONCAT(FName, ' ', Middle, ' ', LName))), ' ', ' ') 
    , Address = CONCAT(Address1, IIF(Address2 IS NOT NULL, CONCAT(', ', Address2), '')) 
    , City 
    , Zip 
FROM tblImport (NOLOCK); 

否則,這將工作:

INSERT INTO TblStuff (FullName, Address, City, Zip) 
SELECT FullName = REPLACE(RTRIM(LTRIM(ISNULL(FName, '') + ' ' + ISNULL(Middle, '') + ' ' + ISNULL(LName, ''))), ' ', ' ') 
    , Address = ISNULL(Address1, '') + CASE 
     WHEN Address2 IS NOT NULL THEN ', ' + Address2 
     ELSE '' END 
    , City 
    , Zip 
FROM tblImport (NOLOCK);