- CREATE TABLE #ok_result([repair_no] INT,[sno] nvarchar(50),[rno] NVARCHAR(50))
- ;with temp as
- (
- select '63738893' repair_no,'20190504' report_date,'HES2418819040700003'service_sheet_no,null sno,'467769309410' rno union all
- select '63738893' repair_no,'20190504' report_date,'HES2418819040700003'service_sheet_no,'467769309411' sno,null rno union all
- select '63738793' repair_no,'20190508' report_date,'HES2418819040700003'service_sheet_no,'467769309411' sno,null rno
- ),s AS
- (
- SELECT ROW_NUMBER() OVER(PARTITION BY [repair_no] ORDER BY repair_no) AS [ROW_NUM],
- [repair_no],
- [sno]
- FROM temp
- WHERE [sno] IS NOT NULL
- )
- MERGE #ok_result AS Target
- USING (SELECT [repair_no],[sno] FROM s WHERE [ROW_NUM] = 1) AS Source
- ON (Target.[repair_no] = Source.[repair_no])
-
- WHEN MATCHED THEN
- UPDATE SET target.[sno] = source.[sno]
-
- WHEN NOT MATCHED BY TARGET THEN
- INSERT ([repair_no],[sno]) VALUES ([repair_no],[sno]);
-
- ;with temp as
- (
- select '63738893' repair_no,'20190504' report_date,'HES2418819040700003'service_sheet_no,null sno,'467769309410' rno union all
- select '63738893' repair_no,'20190504' report_date,'HES2418819040700003'service_sheet_no,'467769309411' sno,null rno union all
- select '63738793' repair_no,'20190508' report_date,'HES2418819040700003'service_sheet_no,'467769309411' sno,null rno
- ),r AS
- (
- SELECT ROW_NUMBER() OVER(PARTITION BY [repair_no] ORDER BY repair_no) AS [ROW_NUM],
- [repair_no],
- [rno]
- FROM temp
- WHERE [rno] IS NOT NULL
- )
- MERGE #ok_result AS Target
- USING (SELECT [repair_no],[rno] FROM r WHERE [ROW_NUM] = 1) AS Source
- ON (Target.[repair_no] = Source.[repair_no])
-
- WHEN MATCHED THEN
- UPDATE SET target.[rno] = source.[rno]
-
- WHEN NOT MATCHED BY TARGET THEN
- INSERT ([repair_no],[sno]) VALUES ([repair_no],[rno]);
- SELECT [repair_no],[sno],[rno] FROM #ok_result