2

私はETLにかなり慣れていません。私はこのプロセスに取り組んでおり、それが行うことは、人々の生年月日をロードすることです。これは、ファクト テーブルから別のテーブルにロードされます。関係する 3 つのテーブルすべてを結合するためのキーはありません。名前フィールドを分割し、分割名と一致させます。これは一致するものをロードしますが、私の質問は、一致しないものを別の 3 番目のテーブルにロードする必要があるということです。どうすればそのロジックを実行できますか?

update FactTableEmp F
       set Bdate = S.Birthdate

from   FactTableEmp
       cross apply dbo.split(Name) as u
       join SourceTableEmp S on u.Fname = s.FirstName and u.LName = S.Lastname  

--Is using the one below going to work using the same way above?
u.Fnames != S.FirstName
u.Lname != S.Lastname
4

2 に答える 2

1

MERGEステートメントを使用すると (例D. MERGE ステートメントの結果を別のテーブルに挿入する を参照)、ETL プロセスを 1 つのステートメントに単純化できるはずです。

于 2012-11-08T15:40:33.340 に答える
0
INSERT dbo.third_table
SELECT Bdate, Name
FROM (
      MERGE dbo.FactTableEmp AS target
      USING (
             SELECT x.Bdate,
                    x.Name,
                    u.FName,
                    u.LName, 
                    s.Birthdate,
                    s.FirstName,
                    s.LastName
             FROM dbo.FactTableEmp x CROSS APPLY dbo.split(x.Name) u
               FULL JOIN dbo.SourceTableEmp s ON u.FName = s.FirstName and u.LName = S.Lastname
      ) AS source
ON (target.Name = source.Name AND source.FName = source.FirstName AND source.LName = source.Lastname)
WHEN MATCHED 
  THEN UPDATE SET target.Bdate = source.Birthdate
WHEN NOT MATCHED BY SOURCE
  THEN UPDATE SET target.Name = target.Name
OUTPUT INSERTED.Bdate, INSERTED.Name) AS Changes(Bdate, Name)
WHERE Bdate IS NULL;
于 2012-11-14T17:04:25.277 に答える