我有一个巨大的主表(1tb 数据)和 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 链接到 A、B、C 和 D 行,将 Row2 链接到 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。
有更好的解决方案吗?