使用sql insert语句增加非唯一字段

时间:2010-12-29 18:45:34

标签: sql insert field increment

我有三个表 TelNo RefNo Ref_Check_No RefNo Ref_Check_No 分别包含 Telephone_Id Entity_Id 列以及其他列,而 TelNo Telephone_Id Entity_Id 。我想要做的是将 Ref_Check_No 中的所有记录插入到 RefNo 表中。 TelNo 表包含每个 Entity_Id Telephone_Id 。提到的所有这些列都不是唯一的。

我知道如何从 Ref_Check_No 表中插入数据。但是,我似乎无法为每个 Entity_Id 插入 Telephone_Id 值。我想要做的是从 TelNo 表中检索每 Entity_Id 的MAX Telephone_Id 号码,并为每个增加1使用insert语句在 RefNo 表中的Entity_Id 。以下是我希望在 RefNo 表中实现的示例:

             **TelNo Table**                  **RefNo Table**
        Telephone_Id   Entity_Id        Telephone_Id    Entity_Id
             1         ABCD               4              ABCD
             2         ABCD               5              ABCD
             3         ABCD               6              ABCD
             89       EFGH               7              ABCD
             90          EFGH              96             EFGH
             95          EFGH              97             EFGH

基本上我想要做的是从每个 Entity_Id (ABCD和EFGH)找到MAX Telephone_Id 号码 TelNo 表格,并在 RefNo 表格中为每个对应的 Entity_Id 增加1。

下面是我正在处理的代码,我似乎无法做对。

 INSERT INTO
RefNo
(
Telephone_Id,
Entity_ID,
ContactName
) 
SELECT     
  (SELECT COUNT(*) FROM Ref_Check_No b WHERE(a.Entity_Id = b.Entity_Id) 
    ISNULL ((SELECT MAX(Telephone_Id) AS Telephone_Id FROM TelNo 
    WHERE (Entity_Id = a.Entity_Id)), 0) AS Telephone_Id,

Entity_ID,
ContactName               
FROM         
Ref_Check_No

有没有办法找到MAX Telephone_Id 号码,并在 RefNo <中插入数据时使用相关子查询为每个 Entity_Id 递增1 / strong>同时表?

1 个答案:

答案 0 :(得分:0)

我很难理解你的榜样。您想在RefNo中为Ref_Check_No中的每条记录创建一行,使用相同的Entity_ID和增加的Telephone_ID标记每一行吗?

如果是这种情况,请尝试此操作(对于MSSQL):

INSERT INTO RefNo (Entity_ID, Telephone_ID)    
SELECT r.Entity_ID, 
  t.MAXID + ROW_NUMBER() OVER(Partition BY r.Entity_ID order by r.Telephone_ID) AS Telephone_ID
FROM ref_check_no r
  INNER JOIN (
    SELECT Entity_ID, Max(Telephone_ID) as MaxID
    FROM TelNo 
      GROUP BY Entity_ID) t 
   ON r.Entity_ID=t.Entity_ID