我有以下表格(在SQL-Server2008 R2中):
Table1:
Id Guid
1 {530D8FE1-7541-43CC-9F92-1AA776490155}
2 {CAC5B001-C8DE-46AA-A848-5D831633D0DF}
3 NULLTable2:
Id Column1 Table2FK
1 1 1
2 1 2
3 1 3我想执行一个通过Table2.Column1聚合的查询,并将其连接到具有最大Id但包含非空值Table1.Guid的Table1行。在这种情况下,它应该连接到Table1的第2行。作为一个查询,我想要这样的东西(尽管这不是有效的sql):
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行上联接。
发布于 2011-03-24 17:03:50
您可以使用外部联接来匹配具有非空guid的行。然后,row_number可以给找到的每一行一个“排名”,因此最高的Column1将具有排名1:
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。
https://stackoverflow.com/questions/5416751
复制相似问题