2016-06-17 34 views
2

我有一個表的客戶,和一張桌子推銷員獲取原始數據,內部都具有一個名稱列:從不同的表

CustomerName  SalesmanName 
Peter    Charlie 
Vlado    Charlie 
Landon    Charlie 
Peter    Clint 
Vlado    Clint 
Landon    Clint 
Peter    Tim 
Vlado    Tim 
Landon    Tim 
Peter    Armand 
Vlado    Armand 
Landon    Armand 

但想要得到的是:

CustomerName   SalesmanName 
Peter     Charlie 
Vlado     Clint 
Landon     Tim 
         Armand 

我該怎麼辦?是否有可能使用查詢完全按照他們在表中的那些列來獲取這些列?

+0

你只是想列出任意對的值,但不能重複值且不論哪一方有更多一一列舉值? –

+0

@HARTCO正是我想要的 – AlexGH

+0

爲什麼你需要這種方式,而不是像兩個查詢和兩個單獨的結果? –

回答

4

可以使用ROW_NUMBER()功能來生成連接兩個有用的任意行號:

;with cust AS (select name,ROW_NUMBER() OVER(ORDER BY name) AS RN from Customers) 
    ,sales AS (select name,ROW_NUMBER() OVER(ORDER BY name) AS RN from Salesman) 
select a.name as CustomerName 
    , b.name as SalesmanName 
from cust a 
FULL JOIN sales b 
    ON a.RN = b.RN 
ORDER BY COALESCE(a.RN,b.RN) 
1

我假設你有你的表的主鍵,那麼你可以通過使用ROW_NUMBER配對這兩列FULL OUTER JOIN。可以說CustomerIdSalesmanId分別是CustomersSalesman表的主鍵。現在,這裏是查詢: -

SELECT 
    ISNULL(CS.Name, '') AS CustomerName, 
    ISNULL(SM.Name, '') AS SalesmanName 
FROM 
(
    SELECT 
     Name, 
     ROW_NUMBER() OVER (ORDER BY CustomerId) AS RN 
    FROM Customers 
) CS 
FULL OUTER JOIN 
(
    SELECT 
     Name, 
     ROW_NUMBER() OVER (ORDER BY SalesmanId) AS RN 
    FROM Salesman 
) SM 
ON SM.RN = CS.RN 

下面是結果

CustomerName   SalesmanName 
    Peter     Charlie 
    Vlado     Clint 
    Landon     Tim 
          Armand