2012-07-13 35 views
1

我已經一個sql scriptone table用於與two alias,並作出JOIN它 但我需要理解爲什麼以及何時需要它這樣做 請詳細說明?爲什麼要使用相同表的別名,做自連接

SELECT 

      ISNULL(MarketValue,0) 
     FROM 
      (     
      SELECT TOP 5 

       Delta, 
       MarketValue  
      FROM 
       (
       SELECT DISTINCT 

        FormatNumber(SUM([CURRENT].MarkToMarket), 0, ',', 0) AS Delta, 
        AVG([CURRENT].Mark) * SUM([CURRENT].Position) AS NumericPosition, 
        FormatNumber(AVG([CURRENT].Mark) * SUM([CURRENT].Position)* CASE WHEN [CURRENT].SecurityType IN ('Equity','Equity Option') THEN 100 ELSE 1 END, 0, ',', NULL) AS MarketValue 
       FROM 
        NAV [CURRENT] 
        LEFT JOIN 
        NAV Compare ON 
        [CURRENT].PurchaseLotId = Compare.PurchaseLotId AND 
        Compare.Date = '2012-06-06' 
       WHERE 

        [CURRENT].SecurityType not in ('Equity') 
       GROUP BY 

       ORDER BY 
        NumericDelta DESC 
      ) Movers 
     FOR XML PATH ('TR'), TYPE 
     ) AS VARCHAR(MAX) 
    ) 

Why it is used like FROM 
        NAV [CURRENT] 
        LEFT JOIN 
        NAV Compare ON 
        [CURRENT].PurchaseLotId = Compare.PurchaseLotId AND 
        Compare.Date = '2012-06-06' 

NAV是隻有一個表又是什麼做採取同桌NAV(當前)和NAV比較和使用左連接兩個別名的目的是什麼?

請詳細說明一下。

回答

4

您從表中

比較2頁的記錄時,需要兩個不同的別名的代表兩個不同的記錄。

因此,舉例來說,如果你有一臺名爲Employees:(ID,姓名,經理ID),其中經理ID是員工的直接經理

ID Name  ManagerId 
1  CEO  null 
2  YourBoss  1 
3  You   2 

的ID和你想運行選擇您的查詢和您的老闆的名字:

SELECT emp.Name, mgr.Name 
FROM Employees emp INNER JOIN Employees mgr on emp.ManagerId = mgr.Id 
WHERE emp.Id = 3 
1

資產淨值正在與自身連接,所以實際上在導航中每個列都有兩個實例。當前和比較用於區分它們。

相關問題