我正在处理大型存储过程,我遇到了一小部分问题。SQL - OutterApply和左连接
当我在表im上执行查询时,可能会有0,1或2个结果。如果有0个结果,我真的不在乎,我的代码返回空值,没什么大不了的。如果有1个结果,我的代码将返回正确的值,但是,如果有2个结果,我无法选择第二个结果。
我的代码如下工作,直到第二个OutterApply(AHM2的东西)。有没有人看到我在做什么错了?
两个OuterApplys的动物ID是相同的。我只需要返回第二个结果(如果有的话),以及是否与第一个结果不同。
SELECT TOP 1
AHM.AnimalHerdManagementId,
AHM.HerdManagementId,
AHM2.AnimalHerdManagementId,
AHM2.HerdManagementId,
HM.Code AS HerdManagementCode,
HM2.Code AS HerdManagementCode2
OUTER APPLY
(
SELECT TOP 1 AHM.AnimalHerdManagementId, AHM.HerdManagementId
FROM dbo.AnimalHerdManagement AHM
WHERE AHM.AnimalId = A.AnimalId AND ISNULL(AHM.EffectiveFrom, @EffectiveFrom) <= @EffectiveFrom
ORDER BY AHM.EffectiveFrom DESC
) AHM
LEFT JOIN dbo.HerdManagement HM ON AHM.HerdManagementId = HM.HerdManagementId
OUTER APPLY
(
SELECT TOP 1 AHM2.AnimalHerdManagementId, AHM2.HerdManagementId
FROM dbo.AnimalHerdManagement AHM2
WHERE AHM2.AnimalId = A.AnimalId AND AHM2.AnimalHerdManagementId != AHM.AnimalHerdManagementId AND ISNULL(AHM2.EffectiveFrom, @EffectiveFrom) <= @EffectiveFrom
ORDER BY AHM2.EffectiveFrom DESC
) AHM2
LEFT JOIN dbo.HerdManagement HM2 ON AHM2.HerdManagementId = HM2.HerdManagementId
我有点懒,所以我的第一次努力将返回两行,而不是试图返回他们塞进一排。根据我的经验,将行转换为列是PITA。这有可能吗? – KingOfAllTrades 2014-09-04 18:40:00
这不是不幸的。我只是修改现有的sp。并添加此列。真的可以改变它,取决于它。 – Mark 2014-09-04 18:44:13
我想尽可能多,否则你可能不会这样做。但是我做了前言,因为我有点懒惰......你能发布你得到的结果吗? – KingOfAllTrades 2014-09-04 18:48:18