2012-08-01 50 views
1
SELECT DISTINCT 
     Positions.Issuer_Name 
    FROM 
    Positions 
     LEFT JOIN 
     (
      SELECT DISTINCT 
       [Assetid] 
      FROM 
       Report 
     ) Report ON 
      Report.[Assetid] = Positions.CUSIP //here instead of Report.[Assetid] i need to use `"right([Assetid], Len([Assetid])-1)"` 

我需要使用"right([Assetid], Len([Assetid])-1)"這裏面除去第一個字母和比較​​如何在左連接中使用L​​EN函數?

這是更好的方式來寫這個?

,而不是寫像

") Report ON Report.right([Assetid], Len([Assetid])-1) = Positions.CUSIP"

我應該聲明變量,做"right([Assetid], Len([Assetid])-1)"第一,但我該如何使用它捧場呢?

回答

4

這取決於你正在嘗試做的,使用列,你想設置基於right()值進行比較在這一點上,或你想要的right()值之前:

SELECT DISTINCT p.Issuer_Name 
FROM Positions p 
LEFT JOIN 
(
    SELECT DISTINCT Right([Assetid], Len(Assetid)-1) TrimmedAssetid, [Assetid] 
    FROM Report 
) r 
    ON r.TrimedAssetid = p.CUSIP 

OR

SELECT DISTINCT p.Issuer_Name 
FROM Positions p 
LEFT JOIN 
(
    SELECT DISTINCT [Assetid] 
    FROM Report 
) r 
    ON Right(r.Assetid, Len(r.Assetid)-1)) = Positions.CUSIP 
+0

是第一個嘗試是我可以聲明什麼我可以聲明一個VARIALE並選擇Assetid? 感謝 – Neo 2012-08-01 18:03:17

+0

@ashuthinks如果你將有多個這樣的,那麼你不能將它存儲在一個單一的變量。你可以創建一個臨時表來存儲所有的值,但是你仍然必須加入它。第一個是類似的,你正在創建一個帶有值的派生表。 – Taryn 2012-08-01 18:04:47

+0

非常感謝你的回覆bluefeet – Neo 2012-08-01 18:07:59

0

試試這個:

由assetid是您需要的別名

SELECT DISTINCT 
    Positions.Issuer_Name 
FROM 
Positions 
    LEFT JOIN 
    (
     SELECT DISTINCT 
      [Assetid] 
     FROM 
      Report 
    ) Report ON 
     right(Report.[Assetid], Len(Report.[Assetid])-1) = Positions.CUSIP 
+1

對不起Mikael感謝您的回答praveen :) – Neo 2012-08-01 18:07:16