SQL如果存在具有相同ID的行,则忽略空值

时间:2013-02-06 16:58:46

标签: sql sybase

我有一个包含以下数据的Sybase表(示例):

Users:

 ID        Type         PlayerID
 --------  -----------  ------------------- 
 65823     1            (null)              
 65823     2            187                 
 91817     1            (null)                         
 37950     1            773                 
 37950     1            (null)              
 37968     1            (null)              
 37968     1            773                                
 72576     1            (null)              
 72576     1            (null)                

我想返回用户和类型的所有组合,但如果有特定用户/类型组合的多个示例,则仅显示不为空的记录

E.g。上表应返回以下内容

 ID        Type         PlayerID
 --------  -----------  ------------------- 
 65823     1            (null)           - although this is null the type/id is unique   
 65823     2            187              
 91817     1            (null)           - this is null but is a unique type/id              
 37950     1            773                                         
 37968     1            773              - this is included and the id/type that has a null player id isn't                              
 72576     1            (null)           - this is a unique type/id

到目前为止,我已经查看了使用group by,having和inner join的查询,但是找不到匹配我正在寻找的结果的方法。

我还查看了group by之类的内容,然后在PlayerID上使用了max,但是聚合函数忽略了空值。

如何使用其玩家ID返回唯一的ID /类型对?

-

保罗提问:

ID        Type         PlayerID
 --------  -----------  ------------------- 
 65823     2            187                        
 37950     1            773                                         
 37968     1            773    

2 个答案:

答案 0 :(得分:1)

从SQL方面你可以这样做:

select * from mytable t1 where playerId is not null
union
select * from mytable t2 where playerid is null 
   and not exists (
          select * from mytable t3 where t2.id=t2.id and t2.type=t3.type
       )

我不知道它会有多么有效,但它会给你你想要的结果。

答案 1 :(得分:0)

什么是

select  ID, type, max(PlayerID)
from    Users
group by ID, type

返回? (我从未使用过sybase)