如何使用group by子句将记录从一个表插入另一个表

时间:2019-04-19 08:18:08

标签: sql sql-server-2012

基本上,我想使用group by子句将A表中的特定列插入B表中。一个表是父子关系表,我想将该记录移到两个表中,一个用于父记录,另一个用于明细记录。一对多关系。为此,我需要使用group by子句在A表中插入需要的特定列。这是我的尝试。

INSERT INTO tbl_ItemReturnMaster (FromTo_Type_Id, From_Id, To_Id, ReturnedDate, 
                                  StatusId, UserId, Reason, DateUpdated, PharmaReturnID)
    SELECT 
        FromTo_TypeId, From_Id, To_Id, ReturnDate,
        StatusId, UserId, Reason, DateUpdated, PharmaReturnID
    FROM 
        tbl_InternalItemReturns 
    GROUP BY 
        ReturnBatchID, From_Id

我使用以下查询来获取我真正需要使用group by的记录,这里是查询。

select 
    ReturnBatchID, From_Id 
from 
    tbl_InternalItemReturns 
group by 
    ReturnBatchID, From_Id

运行第一个查询时,出现此错误:

  

Msg 8120,第16级,状态1,第19行
  在选择列表中,列“ tbl_InternalItemReturns.FromTo_TypeId”无效,因为该列既不包含在聚合函数中,也不包含在GROUP BY子句中。

但是问题是我不想使用group by子句中的所有列,它会向我返回不必要的记录,并且我不想将这些记录插入B表中。

1 个答案:

答案 0 :(得分:1)

我怀疑您确实想要窗口功能,例如:

SELECT FromTo_TypeId, From_Id, To_Id, ReturnDate,
       StatusId, UserId, Reason, DateUpdated, PharmaReturnID
FROM (SELECT iir.*,
             ROW_NUMBER() OVER (PARTITION BY  ReturnBatchID, From_Id ORDER BY DateUpdated DESC) as seqnum
      FROM tbl_InternalItemReturns iir
     ) iir
WHERE seqnum = 1;

ReturnBatchID / From_Id对返回一行。特定行是最近更新的行。