我有,我要用来更新/从源表中插入我的尺寸(SCD型1)TSQL代码,下面是代码:SQL语法的帮助,合并组由数据仓库尺寸
MERGE [dim].[CompanyTest] AS Target
USING [dbo].[DWUSD_LIVE] AS Source
ON Target.Comp = Source.Comp
WHEN MATCHED
AND (ISNULL(Target.[Comp Name],'') <> ISNULL(Source.[Comp Name],'')
OR ISNULL(Target.[Comp Description],'') <> ISNULL(Source.[Comp Description],'')
)
THEN UPDATE SET
[Comp Name] = Source.[Comp Name]
,[Comp Description] = Source.[Comp Description]
,LastUpdated = GetDate()
WHEN NOT MATCHED THEN
INSERT (
Comp
,[Comp Name]
,[Comp Description]
,LastUpdated
) VALUES (
Source.Comp
,Source.[Comp Name]
,Source.[Comp Description]
,GetDate()
);
我的源表有:
[COMP] [COMP NAME] [COMP DESCRIPTION]
1,100,MyCompany,Service Provider
1,100,MyCompany,Service Provider
1,100,MyCompany,Service Provider
2,200,MyCompany,Service Provider
2,200,MyCompany,Service Provider
2,200,MyCompany,Service Provider
2,200,MyCompany,Service Provider
当我运行上面的TSQL一次,我在尺寸得到这样的:
[COMP] [COMP NAME] [COMP DESCRIPTION]
1,100,MyCompany,Service Provider
1,100,MyCompany,Service Provider
1,100,MyCompany,Service Provider
2,200,MyCompany,Service Provider
2,200,MyCompany,Service Provider
2,200,MyCompany,Service Provider
2,200,MyCompany,Service Provider
冷杉st问题是,当我尝试重新运行时,我得到:
Msg 8672,Level 16,State 1,Line 1 MERGE语句试图更新或删除同一行多次。当目标行匹配多个源行时会发生这种情况。 MERGE语句不能多次更新/删除目标表的同一行。细化ON子句以确保目标行至多与一个源行匹配,或使用GROUP BY子句对源行进行分组。
我知道我需要在语句中插入一个“GROUP BY”,我该怎么做才能让我只从源表中获得不同的行。
然后我的尺寸应该只有:
[COMP] [COMP NAME] [COMP DESCRIPTION]
1,100,MyCompany,Service Provider
2,200,MyCompany,Service Provider