2016-04-28 64 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'