我有一个SQL字段,我只想根据FamilyType
的值出现在我的sql查询结果的字段中。
因此,当“家庭类型”为3B
时,我希望出现FamilyID
。
我不想重复行(不使用distinct
或group by
或where clause = 3B
)。
这些是我在Family
表中的字段。
字段:
MemberID, FamilyID, FamilyType
。
因此,按照上面的字段顺序有2行:
select MemberID,
CASE WHEN FamilyType = '3B' THEN FamilyID
ELSE '' END AS FamilyIDFinal
from Family
这仍然会产生2行。我想要:
而不是:
任何指针表示赞赏。
答案 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
通常是万不得已时无法解决的最后解决方案。通常最好修改数据模型。