我在编写查询时遇到了一些麻烦。
例如:
假设我只有一个包含以下值的表:
Items
+-----+--------+
| ID | NAME |
+-----+--------+
| A1 | Item_1 |
| A1 | Item_2 |
| A1 | Item_3 |
| A2 | Item_1 |
| A2 | Item_2 |
| A3 | Item_1 |
+-----+--------+
由此,我想识别与多个ID相关联的所有项目名称以及相关的ID名称。
鉴于此示例,输出将为 -
+----+--------+
| ID | Name |
+----+--------+
| A1 | Item_1 |
| A2 | Item_1 |
| A3 | Item_1 |
| A1 | Item_2 |
| A2 | Item_2 |
+----+--------+
将排除Item_3,因为只有一个实例,与A3相关联。
我正在使用SQL Server 2008.提前感谢!
答案 0 :(得分:1)
使用
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
答案 1 :(得分:0)
试试这个
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的名称 然后,您将选择所需的ID和名称。
以上最简单的形式如下
SELECT id,name
FROM Table1
where name in (
select name as cnt from table1
group by name
having count(name)>1)
答案 2 :(得分:0)
您可以使用窗口聚合:
WITH Counted AS (
SELECT
ID,
NAME,
IDCount = COUNT(*) OVER (PARTITION BY NAME)
FROM atable
)
SELECT
ID,
NAME
FROM Counted
WHERE IDCount > 1
参考文献: