SQL: запрос для определения экземпляров связанной строки в одной таблице - PullRequest
1 голос
/ 24 октября 2011

У меня возникли проблемы с написанием запроса.

Например:

Допустим, у меня есть только одна таблица со следующими значениями:

    Items
+-----+--------+
| ID  |  NAME  |
+-----+--------+
| A1  | Item_1 |
| A1  | Item_2 |
| A1  | Item_3 |
| A2  | Item_1 |
| A2  | Item_2 |
| A3  | Item_1 |
+-----+--------+

Сэто, я хочу идентифицировать все имена элементов, которые связаны с более чем одним идентификатором, наряду с именами связанных идентификаторов.

Учитывая этот пример, вывод будет -

+----+--------+
| ID |  Name  |
+----+--------+
| A1 | Item_1 |
| A2 | Item_1 |
| A3 | Item_1 |
| A1 | Item_2 |
| A2 | Item_2 |
+----+--------+

Item_3 будет исключен, так как существует только один его экземпляр, связанный с A3.

I'mс использованием SQL Server 2008. Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 24 октября 2011

использовать

SELECT * FROM MyTable A WHERE A.Name IN
(SELECT T.Name FROM MyTable T GROUP BY T.Name HAVING COUNT(DISTINCT T.ID) > 1)
ORDER BY A.Name, A.ID
0 голосов
/ 24 октября 2011

Вы можете использовать оконную агрегацию:

WITH Counted AS (
  SELECT
    ID,
    NAME,
    IDCount = COUNT(*) OVER (PARTITION BY NAME)
  FROM atable
)
SELECT
  ID,
  NAME
FROM Counted
WHERE IDCount > 1

Ссылки:

0 голосов
/ 24 октября 2011

Попробуйте это

SELECT id,name
FROM Table1
where name in ( select name from(
select name,count(name) as cnt from table1
group by name)
where cnt>1)

Этот запрос был написан в MS Access / Oracle, попытаться преобразовать в SQL. Я не знаю синтаксис для них.

Я объясню логику из самого внутреннего запроса Сначала вы берете имена, которые больше, чем количество 1 Затем вы выбираете нужные идентификаторы и имена.

Самая простая форма приведена выше

SELECT id,name
FROM Table1 
where name in (
  select name as cnt from table1
  group by name
  having count(name)>1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...