我有一个关于如何验证当其他列满足条件时一行是否加倍的问题。 该表如下所示:
Type Name ID Am
O Name1 1234 1
O Name1 1235 1
O Name1 4569 2
X Name2 1234 1
X Name2 4569 2
C name3 1234 1
对于类型 O,我在 Name1 下有 2 个 ID 表示相同的 Am = 1。 我想做一个查询,检查是否可以在相同的类型和名称和am值下找到多个ID,如果>1则返回,但忽略其余类型。
谢谢!
试试这个
select type, name, am
from table
group by type, name, am
having count(*)>1
大多数 dbms 都支持 row_number,所以你可以使用这个
select * from
(
select *, row_number() over(partition by Type,Name,Am order by ID) as rn
from t
) t1 where t1.rn>1
您是否正在尝试检查类型/名称的组合是否具有多个 am 值?
㞖:
select type, name
from t
group by type, name
having min(am) <> max(am);
我会使用NOT EXISTS
:
SELECT t.*
FROM table t
WHERE EXISTS (SELECT 1
FROM table t1
WHERE t1.Type = t.Type AND t1.Name = t.Name AND t1.Am = t.Am AND t1.ID <> t.ID
);