2013-04-04 41 views
13

Đối với một số lý do tôi đang gặp khó khăn với tuyên bố nàysql insert vào bảng với trường hợp chọn giá trị

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 

Tôi nhận được cú pháp không chính xác gần từ khóa 'là'

Edited để thêm vào câu hỏi này, cho tôi biết nếu tôi cần thêm bài đăng mới hay không.

Tôi biết bên dưới có một chút tuyên bố khác nhau, nhưng bạn có thể đưa ra tuyên bố về trường hợp tương tự như dưới đây không? Liệu các statment dưới đây thậm chí có ý nghĩa?

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

Tất cả các câu trả lời hoạt động, cảm ơn nhiều người! Tôi có thêm một câu hỏi nữa, tôi không chắc chắn liệu mình có cần tạo một bài đăng mới hay chỉ cần hỏi trong bài đăng này hay không, nhưng ở đây đi. Nói trong trường hợp tuyên bố tôi là một cái gì đó như công việc này – eripey

Trả lời

12

Bạn cần dấu phẩy sau end hoàn thành báo cáo trường hợp. Và, "là" đi sau khi tuyên bố case, không phải bên trong nó:

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

Bạn có bí danh bên của vụ án, nó cần phải được bên ngoài của 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

Ngoài ra bạn có thể sử dụng COALESCE thay vì biểu thức CASE. Bởi vì kết quả của concatenating bất cứ điều gì để NULL, thậm chí bản thân, luôn luôn là 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 trên SQLFiddle

+0

Điều đó có vẻ như những gì tôi đã cố gắng để thực hiện, tôi không chắc chắn làm thế nào để quấn đầu của tôi xung quanh logic này được nêu ra, nhưng nó hoạt động :) Cảm ơn. Tôi sẽ bình chọn câu trả lời của bạn, nhưng tôi vẫn chưa ở tuổi 15. – eripey

+0

BTW, Chào mừng bạn đến với StackOverflow! Bạn cần phải đọc những bài viết này: Làm thế nào để chấp nhận một câu trả lời hoạt động? http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

Tôi biết cách chấp nhận câu trả lời, nhưng nếu tôi sử dụng bit và các phần của mỗi bài đăng để đưa ra giải pháp thì sao? – eripey

0

Nếu fname và LName chứa các giá trị NULL, sau đó bạn sẽ cần xử lý đặc biệt để tránh thêm preceeding không cần thiết, trailing, và giữa không gian. Ngoài ra, nếu Address1 chứa giá trị NULL, thì bạn cần phải có xử lý đặc biệt để ngăn không cho thêm ',' không cần thiết ở đầu chuỗi địa chỉ của bạn.

Nếu bạn đang sử dụng SQL Server 2012, sau đó bạn có thể sử dụng CONCAT (NULLs sẽ tự động được coi là chuỗi rỗng) và 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); 

Nếu không, điều này sẽ làm việc:

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); 
Các vấn đề liên quan