Увеличение неуникального поля с помощью оператора вставки SQL - PullRequest
1 голос
/ 29 декабря 2010

У меня есть три таблицы TelNo , RefNo и Ref_Check_No . RefNo и Ref_Check_No содержит столбцы Telephone_Id и Entity_Id соответственно вместе с другими столбцами, тогда как TelNo имеет Телефонный номер и Entity_Id . Я хотел бы вставить все записи из Ref_Check_No в таблицу RefNo . Таблица TelNo содержит Telephone_Id для каждого Entity_Id . Все упомянутые столбцы не являются уникальными.

Дело в том, что я знаю, как вставить данные из таблицы Ref_Check_No . Однако я не могу вставить значения Telephone_Id для каждого Entity_Id . Я хотел бы получить MAX Telephone_Id номер для Entity_Id из таблицы TelNo и увеличить его на 1 для каждой Entity_Id в таблице RefNo с использованием оператора вставки. Ниже приведен пример того, чего я хотел бы достичь в таблице 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

В основном я хочу найти номер MAX Telephone_Id для Entity_Id (ABCD и EFGH) из TelNo и увеличивайте его на 1 для каждой соответствующей Entity_Id в таблице RefNo .

Ниже приведен код, над которым я работал, который, похоже, не могу понять.

 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 и увеличить его на 1 для каждого Entity_Id , используя коррелированный подзапрос при вставке данных в RefNo стол одновременно?

1 Ответ

0 голосов
/ 29 декабря 2010

Мне трудно понять ваш пример.Вы хотите создать одну строку в 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
...