2013-11-22 64 views
0

我知道之前已經問過很多次了,但是我似乎遇到了一個奇怪的問題。臨時表中不能綁定多部分標識符加入

我正在試圖收集數據,以便在圖表中顯示每個貨物每月欠款的總和。

我想加入我的查詢到一個臨時表中的月份,所以即使沒有該月的數據,我仍然會得到一個值爲0的圖形。

我的代碼:

INSERT INTO #DemurrageValuesExport 
     SELECT #Months.Month, 
         SUM(CASE 
          WHEN ISNULL(PD.PotentialDemurrageCost,0) < 0 
          THEN 0 
          ELSE ISNULL(PD.PotentialDemurrageCost,0) 
         END) AS [Potential Demurrage] 
     FROM  dbo.Trip 
        RIGHT JOIN dbo.TripCargo 
         ON dbo.Trip.ID = dbo.TripCargo.TripID 
        RIGHT JOIN dbo.Cargo 
         ON dbo.TripCargo.CargoID = dbo.Cargo.ID 
        LEFT JOIN #Months 
         ON Month = PD.Berthed 
        LEFT JOIN dbo.PotentialDemurrageEvents AS PD 
         ON dbo.Trip.ID = PD.TripID 
         AND PD.Berthed BETWEEN @MonthStartDate AND @MonthEndDate 
         AND dbo.TripCargo.ID = PD.TripCargoID 
     WHERE dbo.Cargo.ID = @CargoID AND TripCargo.Export = 1 
     GROUP BY Month 

這個循環遍歷每個前12個月的,獲取值特定貨物。

問題出現在; ON Month = PD.Berthed

聲稱PD.Berthed無法綁定。但是,我在查詢中的其他地方使用了別名,並且它們不會導致問題。如果我刪除臨時表連接,查詢執行正常。

有沒有人有線索怎麼回事?或者做得不好,在沒有加入另一個月的表格的情況下實現我想要做的事情?

感謝

+0

對錶名使用'aliases'。 sql分析器很困惑,你指的是哪一個「月」列。 – SajjadHashmi

回答

2

走樣臨時表是肯定會幫助清除的東西,但我們也有改變的JOIN s量級,因爲在你嘗試加入到#Months來看,PD別名hadn」牛逼尚未出臺:

INSERT INTO #DemurrageValuesExport 
    SELECT m.Month, 
        SUM(CASE 
         WHEN ISNULL(PD.PotentialDemurrageCost,0) < 0 
         THEN 0 
         ELSE ISNULL(PD.PotentialDemurrageCost,0) 
        END) AS [Potential Demurrage] 
    FROM  dbo.Trip 
       RIGHT JOIN dbo.TripCargo 
        ON dbo.Trip.ID = dbo.TripCargo.TripID 
       RIGHT JOIN dbo.Cargo 
        ON dbo.TripCargo.CargoID = dbo.Cargo.ID 
       LEFT JOIN dbo.PotentialDemurrageEvents AS PD 
        ON dbo.Trip.ID = PD.TripID 
        AND PD.Berthed BETWEEN @MonthStartDate AND @MonthEndDate 
        AND dbo.TripCargo.ID = PD.TripCargoID 
       LEFT JOIN #Months m 
        ON m.Month = PD.Berthed 
    WHERE dbo.Cargo.ID = @CargoID AND TripCargo.Export = 1 
    GROUP BY m.Month 

完全化名後續版本:

INSERT INTO #DemurrageValuesExport 
    SELECT m.Month, 
        SUM(CASE 
         WHEN ISNULL(PD.PotentialDemurrageCost,0) < 0 
         THEN 0 
         ELSE ISNULL(PD.PotentialDemurrageCost,0) 
        END) AS [Potential Demurrage] 
    FROM  dbo.Trip t 
       RIGHT JOIN dbo.TripCargo tc 
        ON t.ID = tc.TripID 
       RIGHT JOIN dbo.Cargo c 
        ON tc.CargoID = c.ID 
       LEFT JOIN dbo.PotentialDemurrageEvents AS PD 
        ON t.ID = PD.TripID 
        AND PD.Berthed BETWEEN @MonthStartDate AND @MonthEndDate 
        AND tc.ID = PD.TripCargoID 
       LEFT JOIN #Months m 
        ON m.Month = PD.Berthed 
    WHERE c.ID = @CargoID AND tc.Export = 1 
    GROUP BY m.Month 
+0

+1爲「完全」別名「版本」,它只是在閱讀時大笑完全'別名'版本哈哈 –

1

這是BEC當你嘗試引用它時,請加入表格。將連接移動到#月後

LEFT JOIN dbo.PotentialDemurrageEvents AS PD 
-- ... 
LEFT JOIN #Months 
     ON Month = PD.Berthed 
相關問題