2013-09-26 63 views
1

此上下文可能沒有幫助,但前提是:我正在爲寄養中的客戶提供展示位置記錄。如果客戶離家休息,或者如果他們的費率發生變化,或者他們改變了養父母,或者他們改變了子計劃或其他一些原因,他們也會改變。我試圖找出與當前的父母,費率和子程序具有相同養老金的最早的安置開始日期(並且不是暫緩)。克服子查詢返回的值多於1個值

我創建了一個視圖,該視圖的最大展示位置不具有RSPT的狀態。現在我想找到他們一直在放置用下面的代碼最早:

SELECT MAX(PL.[PLCMNT ST DT]) AS MaxStDt, 
      PL.ProgID 
FROM  dbo.PlacementLog AS PL 

      INNER JOIN dbo.ProgramLog AS PR ON 
      PL.ProgID = PR.[PROGRAM KEY] 

WHERE  (PR.[PROGRAM CODE] = 29) AND 
      (PL.PlcmntStatus <> N'RSPT') AND 
      (PL.[PLCMNT ST DT] < 
           (SELECT  MaxStartDate 
           FROM  dbo.FcMaxNonRespPlcmntS2 AS FCM 
           WHERE  (ProgID = PL.ProgID) AND 
              (RCode = PL.[RATE CODE]) AND 
              (FosFamID = PL.FosFamID) AND 
              (SubProg = PL.SubProg))) 
GROUP BY PL.ProgID, 
     PL.SubProg, 
     PL.[RATE CODE], 
     PL.FosFamID 

我得到的子查詢返回多個值。這是不允許的...錯誤。任何洞察我在做什麼錯誤?還有,有什麼辦法可以添加到這種代碼的情況下,如果這意味着如果提前放置不存在,列表最大放置從FcMaxNonRespPlcmntS2?

謝謝任何幫助

回答

1

您可以使用TOP 1ORDER BY

SELECT  MAX(PL.[PLCMNT ST DT]) AS MaxStDt, PL.ProgID 
FROM   dbo.PlacementLog AS PL INNER JOIN 
         dbo.ProgramLog AS PR ON PL.ProgID = PR.[PROGRAM KEY] 
WHERE  (PR.[PROGRAM CODE] = 29) AND (PL.PlcmntStatus <> N'RSPT') AND (PL.[PLCMNT ST DT] < 
          (SELECT  TOP 1 MaxStartDate 
          FROM   dbo.FcMaxNonRespPlcmntS2 AS FCM 
          WHERE  (ProgID = PL.ProgID) AND (RCode = PL.[RATE CODE]) AND (FosFamID = PL.FosFamID) AND (SubProg = PL.SubProg) 
          ORDER BY MaxStartDate DESC)) 
GROUP BY PL.ProgID, PL.SubProg, PL.[RATE CODE], PL.FosFamID