2016-11-15 39 views
-2

正在尋找一個連接,我將一個表連接到另一個表上,例如品牌,並根據我放在另一個表上的等級僅連接到第一條記錄。下面顯示了兩個表格和所需輸出的簡單示例。SQL查詢幫助 - 替代加入

感謝

Table 1     Table 2  
brand serial no  brand serial no rank 
toyota x1    toyota c4   1 
toyota x2    toyota c5   2 
toyota x3    toyota c6   3 


Desired output     
toyota x1 c4   
toyota x2 c5   
toyota x3 c6   
+0

總是表中的相同的行數? – jarlh

+0

否我的實際數據集中將有不同數量的行。我不需要它到第二個表的列表末尾,只需要每個值都有一個值,但不會重複 – user2772056

+0

將一行或兩行添加到其中一個表中,然後調整結果。 – jarlh

回答

1

你可以在子查詢中使用ROW_NUMBER,這樣的事情。

樣本數據;

CREATE TABLE #Table1 (Brand nvarchar(10), Serial_No nvarchar(2)) 
INSERT INTO #Table1 (Brand, Serial_No) 
VALUES 
('toyota','x1') 
,('toyota','x2') 
,('toyota','x3') 

CREATE TABLE #Table2 (Brand nvarchar(10), Serial_No nvarchar(2), Rank_No int) 
INSERT INTO #Table2 (Brand, Serial_No, Rank_No) 
VALUES 
('toyota','c4',1) 
,('toyota','c5',2) 
,('toyota','c6',3) 

查詢

SELECT 
    t1.Brand 
    ,t1.Serial_No 
    ,t2.Serial_No 
FROM 
(SELECT 
    ROW_NUMBER() OVER (ORDER BY Serial_No) Row_Num 
    ,Brand 
    ,Serial_No 
FROM #Table1 
) t1 
LEFT JOIN #Table2 t2 
    ON t1.Row_Num = t2.Rank_No 

輸出

Brand Serial_No Serial_No 
toyota x1   c4 
toyota x2   c5 
toyota x3   c6 
+0

*因此通過蠻力獲得規定的輸出*;但是什麼是業務邏輯,規定由serial_no排序的行號是邏輯關係。 –

+0

@Used_By_Already不知道,問OP。 –

+0

我想我的觀點的確是爲什麼給這個神祕的關係帶來一些神奇的公式 - 我們可以猜測。 –