Я пытаюсь вставить записи из старой таблицы в новую версию той же таблицы. Проблема в том, что старая таблица была сделана около 16 лет назад самим пользователем базы данных базы данных, который явно пропустил внешние ключи (поэтому каждая таблица имеет первичный ключ для автонабора, и нет ограничений целостности). Я хотел бы взять все записи и вставить их в мой стол, который таблица имеет следующий ключ:SQL Server 2008 Вставить не дубликаты из запроса подсчета
(ProjectID, SubProjectID, PhaseID, SubPhaseID, DisciplineID)
Я сделал быстрый запрос к группе, и подсчитываю выше ключ в старой таблице, и я получаю 480 записи по существу, что было бы не уникальным ключом в моей новой таблице.
Мой вопрос: Можно ли сделать запрос, который берет все строки, которые не появлялись в моем запросе на подсчет, и вставлять их в новую таблицу? так как мой запрос подсчета группируется по 5 полям, и я хочу вставить полные записи из 17 полей.
Моя попытка до сих пор возвращает 0 записей, поэтому я надеюсь, что они близки. Кроме того, я не мог найти что-нибудь по этому вопросу уже на SO так извинениями, если это дубликат
INSERT INTO [ERP].[dbo].[Fees]
([ProjectID]
,[SubProjectID]
,[PhaseID]
,[SubPhaseID]
,[DisciplineID]
,[DatePhaseCommenced]
,[TotalFee]
,[EnggFee]
,[DraftFee]
,[ProposalDate]
,[Comment]
,[AuthDate]
,[AuthDescription]
,[HourlyRate]
,[Closed]
,[ClosedDate]
,[SubmissionDate])
SELECT
F.ProjectNo, 1, F.PhaseID, F.SubPhase, F.DisciplineID, '1/1/2000',
F.Amount, F.Engineering, F.Drafting, F.[Proposal Date],
F.Comment, F.AuthDate, F.AuthDescription, F.HourlyRate,
CASE
WHEN F.DontBookTime = 1 THEN 1
WHEN F.DontBookTime_Date IS NOT NULL THEN 1
ELSE 0
END,
F.DontBookTime_Date, F.SubmissionDate
FROM
Multitech.dbo.Fees F
WHERE
NOT EXISTS (SELECT
F.ProjectNo, F.PhaseID, F.SubPhase, F.DisciplineID
FROM Multitech.dbo.Fees F
WHERE (F.Amount > 0 OR F.Engineering > 0 OR F.Drafting > 0)
GROUP BY
F.ProjectNo, F.PhaseID, F.SubPhase, F.DisciplineID
HAVING (COUNT(*) > 1))
GO
UPDATE ::
я понял, что я могу сделать вставку на только первичный ключ, где не существующие в мой запрос, а затем обновить с оригинала соответствующими значениями. Имею небольшую проблему с этим запросом.
Выберите дублирует запрос:
SELECT F.ProjectNo, F.PhaseID, F.SubPhase, F.DisciplineID
FROM Multitech.dbo.Fees F
GROUP BY F.ProjectNo, F.PhaseID, F.SubPhase, F.DisciplineID
HAVING (COUNT(*) > 1)
Затем выберите все не в запросе дублей:
SELECT F.ProjectNo, F.PhaseID, F.SubPhase, F.DisciplineID
FROM Multitech.dbo.Fees F
WHERE NOT EXISTS (SELECT
F.ProjectNo, F.PhaseID, F.SubPhase, F.DisciplineID
FROM Multitech.dbo.Fees F
GROUP BY
F.ProjectNo, F.PhaseID, F.SubPhase, F.DisciplineID
HAVING (COUNT(*) > 1))
Но до сих пор не возвращающей никаких значений ...
'КОГДА F.DontBookTime_Date <> NULL' будет ** всегда ** быть ложным - вы не можете использовать нормальное равенство и неравенство операторов с' NULL' - вы можете ** только ** проверить 'IS NULL' или' IS NOT NULL' против потенциального значения NULL ... –
Ах да, я продолжаю делать эту ошибку в SQL. Я исправил это, но он все еще приводит к 0 строкам с таким большим вставным запросом –