Выберите в таблице из таблицы 2, где столбец в (подзапрос)

SELECT .... ColumnNames ...
INTO [FOUND_DUPLICATES] 
FROM [FIND_DUPLICATES] AS FD
WHERE FD.[Contract No] IN 
    (SELECT [Contract No],
            [Vehicle Identity number (VIN)],
            COUNT(*) AS Anzahl 
    FROM FIND_DUPLICATES
    GROUP BY 
            [Contract No],
            [Vehicle Identity number (VIN)]
    HAVING COUNT(*) >1)

Здесь вы можете увидеть, что я хочу:)

Найдите дубликаты и скопируйте их в другую таблицу. Но с этим кодом я получаю ошибку:

Только одно выражение может быть указано в списке выбора, если подзапрос не введен с EXISTS.

Оператор SELECT для поиска дубликатов работает очень хорошо. Но у меня есть проблема, чтобы выбрать и скопировать только дубликаты в новую таблицу с помощью Select Into.

Я надеюсь, вы понимаете, чего я хочу, и любой может помочь мне с этим:)

// РЕДАКТИРОВАТЬ: я использую SQL Server 2008 R2

3 ответа

Решение

Добавление другого подзапроса должно работать?

Select  .... ColumnNames ...

INTO [FOUND_DUPLICATES] 
    FROM [FIND_DUPLICATES]
    AS FD
    where FD.[Contract No] 
       IN (  Select [Contract No] from (Select 
        [Contract No],
        [Vehicle Identity number (VIN)],
        COUNT(*) AS Anzahl 
    from FIND_DUPLICATES
    group by 
        [Contract No],
        [Vehicle Identity number (VIN)]
    having count(*) >1)x)
Select  .... ColumnNames ...

INTO [FOUND_DUPLICATES] 
    FROM [FIND_DUPLICATES]
    AS FD
    where FD.[Contract No] 
       IN (
       select [Contract No] from (Select --inner sub query 
        [Contract No],
        [Vehicle Identity number (VIN)],
        COUNT(*) AS Anzahl 
    from FIND_DUPLICATES
    group by 
        [Contract No],
        [Vehicle Identity number (VIN)]
    having count(*) >1) )

Вы можете использовать это:

SELECT  .... ColumnNames ...

INTO [FOUND_DUPLICATES] 
FROM [FIND_DUPLICATES] AS FD
WHERE FD.[Contract No] IN
(
  SELECT 
    [Contract No]
  FROM FIND_DUPLICATES
  GROUP BY 
     [Contract No],
     [Vehicle Identity number (VIN)]
  HAVING COUNT(*) >1
)

или используйте коррелированный подзапрос:

SELECT .... ColumnNames ...

INTO [FOUND_DUPLICATES] 
FROM [FIND_DUPLICATES] AS FD
WHERE EXISTS 
(
    SELECT 1
    FROM FIND_DUPLICATES FD1
    WHERE FD.[Contract No] = FD1.[Contract No]
    GROUP BY 
        FD1.[Contract No],
        FD1.[Vehicle Identity number (VIN)]
    HAVING COUNT(*) >1
)
Другие вопросы по тегам