我在SQLServer中有一个表,其中包含以下三列:
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()
功能?
答案 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