Подтвердить что ты не робот

Вставка sql в таблицу со значениями для отдельных регистров

По какой-то причине у меня возникают проблемы с этим утверждением

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

Я получаю неправильный синтаксис возле ключевого слова 'as'

Отредактировано для добавления к этому вопросу, дайте мне знать, если мне нужно добавить новое сообщение или нет.

Я знаю, что нижеследующее - это немного другое утверждение, но можете ли вы сделать выражение о ситуации чем-то похожим на ниже? Имеет ли смысл нижеследующая позиция?

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
4b9b3361

Ответ 1

Вам нужна запятая после 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

Ответ 2

У вас есть псевдоним внутри корпуса, он должен быть вне 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

Ответ 3

Также вы можете использовать COALESCE вместо выражения CASE. Поскольку результат объединения чего-либо в NULL, даже самого себя, всегда равен 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

Демо на SQLFiddle

Ответ 4

Если FName и LName содержат значения NULL, вам понадобится специальная обработка, чтобы избежать ненужных дополнительных предварительных, конечных и средних пробелов. Кроме того, если 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);