2013-04-04 12 views
13

Z jakiegoś powodu mam problemy z tym stwierdzeniemINSERT do tabeli z wybranymi przypadku wartości

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 

otrzymuję Niepoprawna składnia w pobliżu słowo kluczowe „jako”

Zmieniano dodać do tej kwestii, daj mi znać, jeśli chcę dodać nowy wpis lub nie.

Wiem, że poniższe zdanie jest nieco inne, ale czy można złożyć oświadczenie w sprawie podobnej do poniższej? Czy poniższe stwierdzenie ma sens?

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

wszystkich odpowiedzi działają, wielkie dzięki! Mam jeszcze jedno pytanie, nie jestem pewien, czy muszę napisać nowy post, czy po prostu zapytać w tym poście, czy nie, ale tutaj idzie. Powiedz w oświadczeniu, że byłam czymś w rodzaju pracy – eripey

Odpowiedz

12

Potrzebujesz przecinków po end kończącym opis przypadku. I „jak” idzie po oświadczeniu case, nie wewnątrz go:

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

Masz alias wewnątrz obudowy, musi być poza 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

także może używać COALESCE zamiast wyrażenia CASE. Ponieważ wyniku złączenie nic NULL, nawet sama, to zawsze NULL

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 

Demo na SQLFiddle

+0

To wygląda na to, co starałem się osiągnąć, nie jestem pewien, jak ominąć tę logikę, ale działa :) Dzięki. Chciałbym zagłosować za twoją odpowiedzią, ale nie mam jeszcze 15 lat. – eripey

+0

BTW, Witamy w StackOverflow! Musisz przeczytać te posty: Jak działa akceptacja odpowiedzi? http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

Wiem, jak akceptować odpowiedzi, ale co zrobić, jeśli użyłem bitów i części każdego posta, aby stworzyć moje rozwiązanie? – eripey

0

Jeśli FName i lname zawierać wartości NULL, wówczas trzeba będzie specjalnego traktowania, aby uniknąć niepotrzebnego dodatkowego poprzedzającego, na końcu i środkowe przestrzenie. Ponadto, jeśli adres 1 zawiera wartości NULL, musisz mieć specjalną obsługę, aby zapobiec dodawaniu niepotrzebnego "," na początku ciągu adresu.

Jeśli używasz SQL Server 2012, a następnie można użyć CONCAT (wartości null są automatycznie traktowane jako pustych strunach) i 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); 

Inaczej, to będzie działać:

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); 
Powiązane problemy