2016-11-09 4 views
0

Я получаю сообщение об ошибке с моим подзапросом и не вижу, что я делаю неправильно. Суб-запрос работает, когда он включен. Там, где-В, очевидно, в чем проблема. Также попробовал EXISTS.SQL Sub-query (Where In)

select [ID NUMBER], [PERNO], [TITLE], [INITIALS], [SURNAME], [DATE OF BIRTH] 
from dbo.[DATASEPT002] 
WHERE [ID NUMBER] IN 
(SELECT [ID NUMBER], COUNT([PERSALNO]) AS COUNTOF 
FROM [dbo].[DATASEPT] 
GROUP BY [ID NUMBER] HAVING COUNT([PERSALNO]) >1) 
+0

Подзапрос избыточностью возвращает 'COUNT ([PERSALNO])'. –

+0

Я забыл добавить. Я также попытался выбрать только идентификационный номер из подзапроса, поэтому подзапрос - это только идентификационные номера, но так и не удалось. Thx для форматирования. – user4242750

+0

Пожалуйста, укажите *** фактический запрос ***, который вы используете с *** фактической ошибкой/проблемой ***, с которой вы сталкиваетесь. Если вы попробовали два или более запросов, укажите их *** ***, каждый из которых связан с ошибкой/проблемой. – MatBailie

ответ

1

У вас есть два столбца в подзапросе. Только один может быть использован для сравнения IN:

select [ID NUMBER], [PERNO], [TITLE], [INITIALS], [SURNAME], [DATE OF BIRTH] 
from dbo.[DATASEPT002] t 
WHERE [ID NUMBER] IN (SELECT [ID NUMBER] 
         FROM [dbo].[DATASEPT] 
         GROUP BY [ID NUMBER] 
         HAVING COUNT([PERSALNO]) > 1 
        ); 

Тем не менее, я бы это выражение более типично, используя оконные функции:

select t.* 
from (select t.*, count(*) over (partition by persalno) as cnt 
     from DATASEPT002 t 
    ) t 
where cnt > 1; 
+0

Есть 2 разных таблицы Gordon, поэтому ваш второй пример неправильный –

+0

Первый работал. Спасибо – user4242750

+0

@ user4242750 - Тогда комментарий к вашему OP ошибочен/неверен. Потому что единственное изменение в вашем запросе состоит в том, что этот «только выбирает идентификационный номер из подзапроса», о котором вы сказали «но так и не смог». – MatBailie