SQL - 第一个表中的所有值与第二个表中的第一个值连接,否则返回null

时间:2018-02-27 13:42:05

标签: sql sql-server join

是否可以在SQL中进行这样的连接:

Sessions and Pageviews

我们希望在SessionID上加入两个表,但结果表应该返回完整的表“Pageviews”,并且每个唯一的SessionID只返回单个的Sessions值(对于其他人,值应该是NULL,请参阅“所需结果”表以获得解释。

谢谢。

2 个答案:

答案 0 :(得分:2)

根据您的要求(并且真正基于提供的数据),以下代码可以完成工作 -

declare @pageviews table(sessionid char(10), pageviews tinyint)
declare @sessions table(sessionid char(10), sessions tinyint)
insert into @pageviews values
('FA-1',34),
('FA-1',36),
('FA-2',23),
('FA-3',11),
('FA-3',32),
('FA-3',25)
insert into @sessions values
('FA-1',23),
('FA-2',14),
('FA-3',9)

;with cte as
(select sessionid,pageviews,ROW_NUMBER() OVER(PARTITION BY sessionid ORDER BY sessionid desc) rn
from @pageviews)
select p.sessionid,p.pageviews,case when rn = 1 then s.sessions else null end as sessions
from cte p inner join @sessions s
on p.sessionid = s.sessionid

答案 1 :(得分:1)

你可以这样做。

SELECT T2.SessionID,T2.pageviews,T1.Sessions
FROM sessions AS T1
RIGHT JOIN 
(
  SELECT ROW_NUMBER() OVER(PARTITION BY sessionid ORDER BY sessionid DESC) AS ROWNUM,
         sessionid,
         pageviews
  FROM pageviews
) AS T2
ON T1.sessionid = T2.sessionid AND T2.ROWNUM = 1

SQLFiddle