SQL视图分配来自另一个表的交替数据

时间:2016-04-05 05:51:22

标签: sql sql-server

我无法用语言彻底解释这一点,因为英语不是我的母语所以我会尝试视觉呈现。首先,我有一个看起来像这样的表,我们称之为tblPerson

tblPerson
ID   Name
1    John
2    Paul
3    James

然后我有另一张桌子tblPhones

tblPhones
ID   Mobile
1    123456
2    654321

现在我的问题是,是否可以创建一个如下所示的视图:

Person-Phone
Name    Mobile
John    123456
Paul    654321
James   123456

我想要显示的是人员列表,并使用tblPhones分配移动列,但交替分配。因此,如果添加新人,请说Mark。视图看起来像这样:

Person-Phone
Name    Mobile
John    123456
Paul    654321
James   123456
Mark    654321

我该如何查询?

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT Name, Mobile
FROM (
  SELECT Name, 
         ROW_NUMBER() OVER (ORDER BY ID) As rn
  FROM tblPerson) AS t1
INNER JOIN (
  SELECT Mobile, 
         ROW_NUMBER() OVER (ORDER BY ID) AS rn,
         COUNT(*) OVER () AS cnt
  FROM tblPhones
) AS t2 ON (t1.rn - 1) % cnt + 1 = t2.rn   

Demo here

答案 1 :(得分:1)

@Giorgos打败了我,但这是我的版本。假设ID是连续的,您不需要row_number窗口函数(如果不是,则执行:)。

CREATE TABLE #tblPerson (ID INT,Name VARCHAR(5));
CREATE TABLE #tblPhones (ID INT, Mobile VARCHAR(6));

INSERT INTO #tblPerson(ID, Name) VALUES( 1, 'John'),( 2, 'Paul'),( 3, 'James');
INSERT INTO #tblPhones(ID, Mobile) VALUES( 1,'123456'),( 2,'654321');

SELECT
  Name, Mobile
FROM #tblPerson
JOIN #tblPhones ON #tblPhones.ID = ((#tblPerson.ID-1) % (SELECT COUNT(*) FROM #tblPhones) +1)
ORDER BY #tblPerson.ID