巨大なマスター テーブル (1 TB のデータ) と 20 を超える列があります。欠落しているデータ フィールドが 0 個以上あるソース データが入ってきます。マスター テーブルで使用可能なフィールドを照合して、不足しているデータを埋める必要があります。次の例を検討してください。
受信データ:
CREATE TABLE #t1 ( f3 VARCHAR(50), f1 INT, f2 INT )
INSERT INTO #t1
SELECT 'Row1',1, NULL
UNION ALL
SELECT 'Row2', 1, 2
マスターテーブル:
CREATE TABLE #t2 ( f1 INT, f2 INT, f3 INT, f4 VARCHAR(255) )
INSERT INTO #t2
SELECT 1, 2, 3, 'A'
UNION ALL
SELECT 1, 2, 4, 'B'
UNION ALL
SELECT 1, 3, 3, 'C'
UNION ALL
SELECT 1, 3, 4, 'D'
UNION ALL
SELECT 2, 3, 4, 'E'
出力で Row1 を Row A、B、C、D にリンクし、Row2 を Row A と B にリンクする必要があります。これは次の方法で実現できます。
SELECT a.f3, b.*
FROM #t2 b
CROSS JOIN #t1 a
WHERE Patindex(Isnull(CONVERT(CHAR(1), a.f1), '_') + Isnull(CONVERT(CHAR(1), a.f2), '_')
, CONVERT(CHAR(1), b.f1) + CONVERT(CHAR(1), b.f2)) != 0
DROP TABLE #t1
DROP TABLE #t2
20 個のフィールドがあると、長くて複雑な SQL になるため、これはあまりスケーラブルなソリューションではありません。
より良い解決策はありますか?