Как пропустить дубликаты данных при вставке в новую таблицу на основе данных других столбцов таблицы - PullRequest
0 голосов
/ 11 июня 2018

Ниже приведен мой запрос, который выбирает записи из организационной таблицы и вставляет их в таблицу userdetails на основе кода производителя, но некоторые коды производителей имеют дублирующиеся значения, и Userlogin не будет разрешать дублирование там, пока я использую код производителя GROUP BY.

Но когда я пытаюсь выполнить приведенный ниже запрос, я получаю следующую ошибку:

Недопустимый столбец 'organisation.OrganisationID' в списке выбора, поскольку он не содержится ни в одном агрегатефункция или предложение GROUP BY.

Запрос:

IF OBJECT_ID('_temp_new_user_details') IS NOT NULL
     DROP TABLE _temp_new_user_details;

SELECT TOP 0 UserID
INTO _temp_new_user_details
FROM UserProductMapping 

INSERT INTO UserDetails (userlogin, Organisationid, emailaddress, username, userpassword, LastModifiedDate, SavedBy, ReceiveEmail, [Disabled])
OUTPUT inserted.UserID INTO _temp_new_user_details --all USerIDs will be saved into _temp_new_user_details
    SELECT 
        '1Qchubb'+ producercode, organisationid, 'demo@chubb.com',
        producercode + N'ii', '123', @CurrentDate, 1, 0, 0
    FROM 
        organisation 
    WHERE 
        producercode != N'00000' 
        AND producercode != '' 
        AND Active = 1 
    GROUP BY 
        producercode

1 Ответ

0 голосов
/ 11 июня 2018

Предполагая, что 1 код производителя имеет только 1 идентификатор организации

SELECT 
    '1Qchubb'+ producercode, organisationid, 'demo@chubb.com',
    producercode + N'ii', '123', @CurrentDate, 1, 0, 0
    ROW_NUMBER() OVER(PARTITION BY PRODUCERCODE ORDER BY PRODUCERCODE, ORGANIZATIONID) AS RNK
INTO #TEMP
FROM 
    organisation 
WHERE 
    producercode != N'00000' 
    AND producercode != '' 
    AND Active = 1 
GROUP BY 
    producercode

INSERT INTO UserDetails (userlogin, Organisationid, emailaddress, username, userpassword, LastModifiedDate, SavedBy, ReceiveEmail, [Disabled])
OUTPUT inserted.UserID INTO _temp_new_user_details
SELECT * FROM #TEMP WHERE RNK = 1

При условии, что 1 код производителя имеет несколько идентификаторов организации, которые различаются в зависимости от уникального кода производителя и идентификатора организации

SELECT 
    '1Qchubb'+ producercode, organisationid, 'demo@chubb.com',
    producercode + N'ii', '123', @CurrentDate, 1, 0, 0
    ROW_NUMBER() OVER(PARTITION BY PRODUCERCODE, ORGANIZATIONID ORDER BY PRODUCERCODE, ORGANIZATIONID) AS RNK
INTO #TEMP
FROM 
    organisation 
WHERE 
    producercode != N'00000' 
    AND producercode != '' 
    AND Active = 1 
GROUP BY 
    producercode

INSERT INTO UserDetails (userlogin, Organisationid, emailaddress, username, userpassword, LastModifiedDate, SavedBy, ReceiveEmail, [Disabled])
OUTPUT inserted.UserID INTO _temp_new_user_details
SELECT * FROM #TEMP WHERE RNK = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...