2016-09-14 88 views
-2

我有一個查詢像下面,但ShowRoomNameUnitName在結果未顯示。我該如何解決它?不工作SQL Server查詢正確

SELECT A.ShowRoomId 
     , Sum(B.BasicAmount) AS TotalBasic 
     , Sum(B.HouseAmount) AS TotalHouseAmount 
     , Sum(B.MedicaleAmount) AS TotalMedicaleAmount 
     , Sum(B.ConvenceAmount) AS TotalConvenceAmount 
     , Sum(B.PhoneBillAmount) AS TotalPhoneBillAmount 
     , Sum(B.DirectorRemuneration) AS TotalDirectorRemuneration 
     , Sum(B.OthersAmount) AS TotalOthersAmount 
FROM Employees A 
     OUTER APPLY (SELECT TOP 1 * 
        FROM EmployeeBasics B 
        WHERE (A.EmployeeID = B.EmployeeID) 
        ORDER BY B.BasicUpdateDate DESC) AS B 
     OUTER APPLY (SELECT ShowRoomId 
          , ShowRoomName 
          , UnitId 
        FROM dbo.ShowRooms C 
        WHERE A.ShowRoomId = C.ShowRoomId) AS C 
     OUTER APPLY (SELECT UnitId 
          , UnitName 
        FROM dbo.Units D 
        WHERE C.UnitId = D.UnitId) AS D 
GROUP BY A.SHowRoomId 
+1

當然這些列沒有顯示,它們不在select語句的列表中。你爲什麼在這裏使用OUTER APPLY而不是聯接? –

回答

0
  • 使用更具描述性的標題,當你問一個問題。查詢不到 工作描述基本上99%的所有問題。
  • 您的單位名稱和 showroomname不出現,因爲你不選擇他們...
+0

當我添加C.ShowRoomName,它顯示我的錯誤。 –

+0

也許那麼你應該使用左連接,而不是外部應用然後呢?我沒有看到邏輯中的任何內容來說明你爲什麼使用outer apply而不是連接。 – xenapan

0

我猜測,你希望是這樣的。注意我將你的別名改爲有意義的。使用A,B,C是別名的壞習慣。保持這樣的代碼是具有挑戰性的。

SELECT e.ShowRoomId 
    , Sum(eb.BasicAmount) AS TotalBasic 
    , Sum(eb.HouseAmount) AS TotalHouseAmount 
    , Sum(eb.MedicaleAmount) AS TotalMedicaleAmount 
    , Sum(eb.ConvenceAmount) AS TotalConvenceAmount 
    , Sum(eb.PhoneBillAmount) AS TotalPhoneBillAmount 
    , Sum(eb.DirectorRemuneration) AS TotalDirectorRemuneration 
    , Sum(eb.OthersAmount) AS TotalOthersAmount 
    , sr.ShowRoomName 
    , u.UnitName 
FROM Employees e 
OUTER APPLY 
(
    SELECT TOP 1 * 
    FROM EmployeeBasics eb1 
    WHERE e.EmployeeID = eb1.EmployeeID 
    ORDER BY eb1.BasicUpdateDate DESC 
) AS eb 
LEFT JOIN ShowRooms sr ON sr.ShowRoomId = e.ShowRoomId 
LEFT JOIN Units u ON u.UnitID = sr.UnitID 
GROUP BY e.SHowRoomId 
    , sr.ShowRoomName 
    , u.UnitName