首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL:使用null检查的联接后聚集

SQL:使用null检查的联接后聚集
EN

Stack Overflow用户
提问于 2011-03-24 16:52:24
回答 1查看 648关注 0票数 1

我有以下表格(在SQL-Server2008 R2中):

Table1:

代码语言:javascript
运行
复制
Id   Guid
1    {530D8FE1-7541-43CC-9F92-1AA776490155}
2    {CAC5B001-C8DE-46AA-A848-5D831633D0DF}
3    NULL

Table2:

代码语言:javascript
运行
复制
Id    Column1    Table2FK
1     1          1
2     1          2
3     1          3

我想执行一个通过Table2.Column1聚合的查询,并将其连接到具有最大Id但包含非空值Table1.GuidTable1行。在这种情况下,它应该连接到Table1的第2行。作为一个查询,我想要这样的东西(尽管这不是有效的sql):

代码语言:javascript
运行
复制
select t2.Id, t2.Column1, t2.Table2FK, max(t1.Id), t1.Guid 
    from Table2 t2
    join Table1 t1 on t2.Table2FK = t1.Id 
    where t1.Guid is not null
    group by t2.Column1

我已经设法通过Table2.Id2分别执行空检查和聚合,但不是在同一查询中同时执行这两个操作。在第一种情况下,联接返回2行,在第二种情况下,它在Table1的第3行上联接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-24 17:03:50

您可以使用外部联接来匹配具有非空guid的行。然后,row_number可以给找到的每一行一个“排名”,因此最高的Column1将具有排名1:

代码语言:javascript
运行
复制
select  *
from    (
        select  row_number() over (partition by t2.Column1, 
                    order by t2.id desc) as rn
        ,       *
        from    Table2 t2
        left join    
                Table1 t1
        on      t2.Table2FK = t1.id
                and t1.guid is not null
        ) as SubQueryAlias
where   rn = 1

该子查询是必需的,因为SQL Server不允许在where子句中直接使用row_number

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5416751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档