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

我得到的子查询返回超过 1 个值。这是不允许的...错误。对我做错了什么有任何见解吗?另外,有没有办法在此代码中添加一个案例,如果早期放置不存在,则列出来自 FcMaxNonRespPlcmntS2 的最大放置?

感谢您的任何帮助

4

1 回答 1

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
于 2013-09-26T23:25:52.720 回答