2016-04-28 42 views
1

我要参加一个方式如下表:SQL服务器:加入所有左表和重复右

表A:

1 
2 
3 
4 
5 

表B:

A 
B 

结果表应该是:

1 A 
2 B 
3 A 
4 B 
5 A 

你有任何我deas如何做到这一点?

+1

你为什么会需要这样的查询? –

+4

使用模数,如果col是奇数,则A,如果偶数,则B. – jarlh

+0

在@vkp的评论上展开,原始问题陈述是什么?这听起来像是对原始(或者可能是任何)问题的错误处理方式。 –

回答

1

假设最坏的情况下,在表A中的列也不是没有缺口的序列和表B中的行中预先不知道的数目,必须应用两个表一个ROW_NUMBER,然后在MODULO加入:

SELECT col1, col2 
FROM 
(
    SELECT col1, 
     ROW_NUMBER() OVER (ORDER BY col1) -1 AS rn 
    FROM tableA 
) AS A 
JOIN 
(
    SELECT col2, 
     ROW_NUMBER() OVER (ORDER BY col2) -1 AS rn 
    FROM tableB 
) AS B 
ON A.rn % (SELECT COUNT(*) FROM tableB) = B.rn 
1

也许是这样的:

select A.nr, case when (A.nr%2=0) then b2.chr else b3.chr end letter 
from A, B b2, B b3 
where b2.chr = 'A' and b3.chr = 'B'