17

何らかの理由で、このステートメントに問題があります

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
4

4 に答える 4

2

また、CASE 式の代わりにCOALESCEを使用することもできます。何かを 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 のデモ

于 2013-04-04T20:38:08.943 に答える
0

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);
于 2013-04-04T21:32:01.970 に答える