使用合并(更新/插入)和分组依据的SQL存储过程

时间:2019-07-16 05:34:09

标签: sql-server stored-procedures

我有一个存储过程,需要向其中添加合并功能。我需要更新匹配的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

1 个答案:

答案 0 :(得分:0)

您没有为SUM(qty)设置别名

尝试sum(qty) as qty(尽管我个人会将其别名为total_qty,然后在下面调整更新/插入块)

enter image description here

当您在任何类型的子查询中都无法为列名加上别名时,总是会出现此错误