我有一个存储过程,需要向其中添加合并功能。我需要更新匹配的rfds_processing_id并在不匹配时插入。 Group By和Where语句使它变得棘手。
这是当前有效的SP
INSERT INTO Summary_Current(model, type, elevation, rfds_processing_id, qty)
SELECT model, type, elevation, rfds_processing_id, SUM(qty)
FROM Current_Antenna C
WHERE C.rfds_processing_id = @rfds_processing_id
AND C.model != ''
AND C.type IS NOT NULL
AND C.elevation IS NOT NULL
GROUP BY C.model, C.type, C.elevation, rfds_processing_id
这就是我要进行合并的地方。我收到以下错误:
*Msg 8155, Level 16, State 2, Procedure CurrentSummary, Line 33 [Batch Start Line 5]
No column name was specified for column 5 of 'SOURCE'.*
MERGE INTO Summary_Current AS TARGET
USING
(
SELECT model, type, elevation, rfds_processing_id, SUM(qty)
FROM Current_Antenna C
WHERE C.rfds_processing_id = @rfds_processing_id AND C.type IS NULL AND C.elevation IS NULL
GROUP BY C.model, C.type, C.elevation, rfds_processing_id
) AS SOURCE
ON SOURCE.rfds_processing_id = @rfds_processing_id --AND TARGET.rfds_processing_id = @rfds_processing_id
WHEN NOT MATCHED THEN
INSERT (model, type, elevation, rfds_processing_id, qty)
VALUES (SOURCE.model, SOURCE.type, SOURCE.elevation, SOURCE.rfds_processing_id, SOURCE.qty)
WHEN NOT MATCHED BY SOURCE THEN DELETE;
更新为工作合并
ALTER PROCEDURE [dbo].[CurrentSummary]
(
@rfds_processing_id uniqueidentifier = '',
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON
-- Insert statements for procedure here
MERGE Summary_Current AS TARGET
USING
(
SELECT model, type, elevation, rfds_processing_id, SUM(qty) as total_qty
FROM Current_Antenna C
WHERE rfds_processing_id = @rfds_processing_id AND C.model !=''
GROUP BY C.model, C.type, C.elevation, C.rfds_processing_id
) AS SOURCE
ON SOURCE.rfds_processing_id = TARGET.rfds_processing_id AND SOURCE.model != ''
WHEN NOT MATCHED THEN
INSERT (model, type, elevation, rfds_processing_id, qty)
VALUES (SOURCE.model, SOURCE.type, SOURCE.elevation, SOURCE.rfds_processing_id, SOURCE.total_qty) ;
END
答案 0 :(得分:0)
您没有为SUM(qty)设置别名
尝试sum(qty) as qty
(尽管我个人会将其别名为total_qty,然后在下面调整更新/插入块)
当您在任何类型的子查询中都无法为列名加上别名时,总是会出现此错误