2012-11-06 28 views
0

在我的表中,我需要知道每个ID是否只有一个ID_name。我怎么写这样的查询?SQL查询:如何由另一列的列组的不同计数

我想:

select ID, count(distinct ID_name) as count_name 
from table 
group by ID 
having count_name > 1 

但它永远运行。

有什么想法?

+0

我要补充一点,我甚至不知道如果我在正确的查询,是因为它从来没有执行! – saghar

回答

2
select ID 
from YourTable 
group by 
     ID 
having count(distinct ID_name) > 1 

select * 
from YourTable yt1 
where exists 
     (
     select * 
     from YourTable yt2 
     where yt1.ID = yt2.ID 
       and yt1.ID_Name <> yt2.ID_Name 
     ) 

现在,大多数ID列被定义为primary key和是唯一的。因此,在常规数据库中,您希望这两个查询都返回一个空集。

0

选择tt.ID,最大值(tt.myRank)从 ( 由ip.ID选择ip.ID,ip.ID_name, ROW_NUMBER()以上(分区,ip.ID_nameorder通过ip.ID)作为myRank 从YourTable IP )TT 组由tt.ID

这使您与它的每一个ID是ID_NAME

的总数如果你想只有那些ID的具有相关联的一个以上的名称只需添加一个where子句 例如

选择tt.ID,最大值(tt.myRank)从 ( 选择ip.ID,ip.ID_name, ROW_NUMBER()以上(由ip.ID分区,ip.ID_nameorder通过ip.ID)作为myRank 从YourTable IP )TT 其中tt.myRank> 1 组由tt.ID

相关问题