如何在左外连接后获得替换行

时间:2016-03-24 11:01:12

标签: sql sql-server sql-server-2008 join left-join

我必须从2个表构建一个视图:语言文章

语言

langId:1   langCode:en   priority: 1
langId:2   langCode:da   priority: 2 
langId:3   langCode:es   priority: 3

文章

langId: 1, articleId: 1 title: "First art-en"   originId: "ASDF"
langId: 2, articleId: 2 title: "First art-da"   originId: "ASDF"
langId: 1, articleId: 3 title: "Second art-es"  originId: "AAAA"

不同语言的相同文章将具有唯一的OriginId。 当文章不存在于特定语言且应该基于语言优先级时,我需要选择替换行。

实现这一目标的最佳方法是什么? 我想避免使用CTE / Temp表和循环语句。

1 个答案:

答案 0 :(得分:0)

这是优先级查询。您可以使用row_number()

执行此操作
select al.*
from (select a.*,
             row_number() over (partition by l.priority) as seqnum                                
      from article a join
           language l
           on a.langid = l.langid
     ) al
where seqnum = 1;