我无法用语言彻底解释这一点,因为英语不是我的母语所以我会尝试视觉呈现。首先,我有一个看起来像这样的表,我们称之为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
我该如何查询?
答案 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
答案 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