2017-08-28 4 views
0

DB1に存在するストアドプロシージャを再作成し、既存のテーブルを新しいデータベースDB2の新しいテーブルにマップする必要があります。ケースステートメントで合うように名前、姓フィールドを連結する

Fullnameにテーブルがあり、新しいdbに2つのカラムfirstname,lastnameがありました。私は連結を持つことができますが、使用する必要があるすべての特殊文字を切り捨てるユーザー定義関数もあります。

このケースステートメントに適合するように、名と姓の列を1つのフルネーム列として使用するにはどうすればよいですか?

すべての名前を持つマスターテーブルのようにenrが登録された別のテーブルから[P Name]が取得されています。どちらのテーブルの名前もcaseステートメントのように表示されます。

私はすべてのブログとスタックエクスチェンジを検索しようとしましたが、希望の返信を受け取ることができませんでした。

masterfinancer = dbo.fn_RemoveSpecialChars(iif(enr.p_name = 'XXXXXXXXX,XXXXXXX(2)', 'XXXXX XXXX XXX GROUP', mv.master_vendor_name)) 
Sma_finace_key = iif(enr.p_name = 'XXXXXXXXX0L(2)', 1111, mv.ven_key) 

[P Name] = case 
       when enr.p_name = 'INACTIVE ' or enr.p_name = 'UNASSIGNED' 
        then [P Name] 
        else dbo.fn_RemoveSpecialChars(enr.p_name) 
      end 

答えて

0

それぞれのフィールドで機能を使用し、それらを一緒に結合する必要があります。ここでは、IIFステートメント(SQL 2012でのみ機能する)を削除し、 "First、Last"が必要であることを前提にFullNameフィールドを作成しました。最初の名前または最後の名前がNULLのときにFullNameフィールドがNULLにならないようにCOALESCEを追加しました。

SELECT 
    masterfinancer = dbo.fn_RemoveSpecialChars(
      CASE 
       WHEN enr.p_name = 'XXXXXXXXX,XXXXXXX(2)' 
       THEN 'XXXXX XXXX XXX GROUP' 
       ELSE mv.master_vendor_name 
      END) 
    , Sma_finace_key = 
      CASE 
       WHEN enr.p_name = 'XXXXXXXXX0L(2)' 
       THEN 1111 
       ELSE mv.ven_key 
      END 
    , [P Name] = 
      CASE 
       WHEN enr.p_name IN('INACTIVE ', 'UNASSIGNED') 
       THEN [P Name] 
       ELSE dbo.fn_RemoveSpecialChars(enr.p_name) 
      END 
, FullName = 
    COALESCE(dbo.fn_RemoveSpecialChars(enr.last_name) + ', ', '') + 
    COALESCE(dbo.fn_RemoveSpecialChars(enr.first_name), '') 
関連する問題