2016-07-07 5 views
1

У меня есть таблица состояний, которая имеет состояния, присвоенные различным странам. Бывают случаи, когда разные страны имеют одинаковые названия. Как я могу это получить. Я пробую следующий запрос. Я прав.?Получить дубликаты Государственные названия для стран

SELECT Name , COUNT(*) count 
FROM 
[DB].[dbo].[State] 
GROUP BY 
Name 
Having 
COUNT(*) > 1 

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

SELECT st.Name , COUNT(*) count,co.Name 
FROM [DB].[dbo].[State] st 
INNER join [DB].[dbo].Country co on st.CountryID = co.ID 
GROUP BY 
st.Name, 
co.Name 
Having 
COUNT(*) > 1 
+0

Попробуйте мой Изменено ответ ... – DineshDB

ответ

1

Да, это правильно, так что я не понимаю, что это вопрос?

Если вы хотите его с названием страны и всей другой информации, которую вы можете использовать EXISTS():

SELECT * FROM [DB].[dbo].[State] t 
WHERE EXISTS(SELECT 1 FROM [DB].[dbo].[State] s 
      WHERE t.state = s.state and t.country <> s.country) 

EDIT: Попробуйте

SELECT st.Name ,co.Name 
FROM [DB].[dbo].[State] st 
INNER join [DB].[dbo].Country co on st.CountryID = co.ID 
WHERE EXISTS(SELECT 1 FROM [DB].[dbo].[State] st2 
      WHERE st.name = st2.name 
      HAVING COUNT(*) > 1) 
+0

См. Мое редактирование. – user2998990

+0

@ user2998990 См. Мой. – sagi

+0

Done .. Спасибо, что он работает. – user2998990

0

Надежда ваш запрос является правильным.,

SELECT st.Name,co.Name,COUNT(st.CountryID) [count] 
FROM [DB].[dbo].[State] st 
LEFT join [DB].[dbo].Country co on st.CountryID = co.ID 
GROUP BY 
st.Name,co.Name 
Having 
COUNT(st.CountryID) > 1 
+0

Если он имеет нулевые значения, что не очень логично, этот запрос будет иметь те же самые результаты, что и его. – sagi

+0

См. Мое редактирование. – user2998990

+0

Не работает. Я не получаю ни одной строки. Где, как я получал строки, когда у меня нет страны на картинке. – user2998990

Смежные вопросы