此上下文可能没有帮助,但如果是:我正在处理寄养客户的就业记录。如果客户离开家庭暂缓或者他们的费率变化,或者如果他们改变养父母,或者他们改变子程序或其他一些原因,他们会改变。我正在尝试确定最早的安置开始日期,其具有与当前的父母,费率和子程序相同的寄养父母,费率和子程序(并且不是暂缓的)。
我创建了一个视图,其最大放置位置没有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
我得到的Subquery返回的值超过1。这是不允许的......错误。对我做错了什么的任何见解?另外,有没有办法在这个代码中添加一个案例,如果早期放置不存在,列表是FcMaxNonRespPlcmntS2的最大位置?
感谢您的帮助
答案 0 :(得分:1)
您可以使用TOP 1
和ORDER 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