如何在没有GroupBy的情况下查找唯一行

时间:2019-11-15 22:43:35

标签: sql sql-server select subquery

我有一个SQL字段,我只想根据FamilyType的值出现在我的sql查询结果的字段中。

因此,当“家庭类型”为3B时,我希望出现FamilyID

我不想重复行(不使用distinctgroup bywhere clause = 3B)。

这些是我在Family表中的字段。

字段: MemberID, FamilyID, FamilyType

因此,按照上面的字段顺序有2行:

  1. 3400、233、3B
  2. 3400,空,ZH
    select MemberID,  
     CASE WHEN FamilyType = '3B' THEN FamilyID 
     ELSE '' END AS FamilyIDFinal
    from Family

这仍然会产生2行。我想要:

  1. 3400,233

而不是:

  1. 3400,233
  2. 3400,空

任何指针表示赞赏。

1 个答案:

答案 0 :(得分:1)

从理论上讲,您可以:

select top (1) with ties
  MemberID,
  CASE WHEN FamilyType = '3B' THEN FamilyID ELSE 0 END AS FamilyIDFinal
from Family
order by row_number() over(partition by MemberID order by case FamilyType when '3B' then 1 else 2 end);

但是,使此查询高效将非常困难。像(MemberID, FamilyType) include (FamilyID)这样的索引应该可以工作,但是它将与单个查询的逻辑紧密结合。根据个人经验,top (1) with ties通常是万不得已时无法解决的最后解决方案。通常最好修改数据模型。