T-SQL查询仅选择在特定列中没有唯一值的行

时间:2016-06-22 13:37:17

标签: sql sql-server tsql

我在SQLServer中有一个表,其中包含以下三列:

  • 行ID
  • RMA

RowID是唯一的,但RMA和Value不是。

我想编写一个查询,从表中选择共享任何特定RMA的所有行。所以,让我们说我们有以下三行

ID  RMA   Value
1 - 222- Car
2 - 923 - Boat
3 - 222 - Plane
4 - 555 - Other
5 - 555 - Jet

我想要一个返回第1,3,4和5行的查询。不会选择第2行,因为它的RMA只出现一次。

我甚至不知道从哪里开始。我是否需要使用COUNT()功能?

5 个答案:

答案 0 :(得分:5)

您可以使用以下内容:

select * 
from your_Table
where RMA in 
    (
        select RMA
        from your_table
        group by RMA
        having count(RowID) > 1
    )

内部查询为您提供不止一次出现的RMA,而外部给出具有这些RMA的记录。

答案 1 :(得分:4)

尝试这样的事情

select id,rma,value from yourtable where rma in 
(select RMA from yourtable 
group by RMA having count(*)>1)

答案 2 :(得分:3)

此处的另一种方法exists并不需要汇总:

select * 
from yourtable y
where exists (
    select 1
    from yourtable y2 
    where y.rma = y2.rma and y.id != y2.id )

答案 3 :(得分:3)

SELECT RowID, 
        RMA, 
        [Value]
FROM (
    SELECT  RowID, 
            RMA, 
            [Value],
            COUNT(*) OVER (PARTITION BY RMA ORDER BY RMA) as c
    FROM YourTable
    ) as p
WHERE p.c > 1

输出:

RowID   RMA Value
3       222 Plane
1       222 Car
4       555 Other
5       555 Jet

答案 4 :(得分:2)

SELECT * FROM TABLE 
WHERE RMA IN
(SELECT RMA FROM TABLE GROUP BY RMA HAVING COUNT(*) >1)

您可以使用嵌套查询,该查询仅考虑COUNT为RMA的行> 1