如果声明在外部适用或情况下

时间:2012-11-05 11:17:44

标签: sql if-statement case outer-join

是否可以在外部应用if语句?我似乎无法让它发挥作用。

这是现有的代码:

select id
from
residentmemberlease rml
left outer join lease l on rml.leaid = l.leaid
outer apply
(SELECT TOP(1) * FROM dbo.RentalHistory a WITH(NOLOCK) WHERE a.resmID = RML.resmID and rthDisplayBit='1'
ORDER BY ISNULL(a.rthMoveOutDate, a.rthMoveInDate) DESC) AS RH

我希望它看起来像这样取决于codeleasestatuscode的值(如果它的1或2):

select id
from
residentmemberlease rml
left outer join lease l on rml.leaid = l.leaid
outer apply
if(select codeleasestatuscode from lease) = '1'
begin
(SELECT TOP(1) * FROM dbo.RentalHistory a WITH(NOLOCK) WHERE a.resmID = RML.resmID and rthDisplayBit='1'
ORDER BY ISNULL(a.rthMoveOutDate, a.rthMoveInDate) DESC) AS RH
end
if(select codeleasestatuscode from lease) = '2'
begin
(SELECT TOP(1) * FROM dbo.RentalHistory a WITH(NOLOCK) WHERE a.resmID = RML.resmID and rthDisplayBit='0'
ORDER BY ISNULL(a.rthMoveOutDate, a.rthMoveInDate) DESC) AS RH
end

1 个答案:

答案 0 :(得分:1)

       SELECT id --<<-- best to add aliases to all columns
         FROM residentmemberlease rml
    LEFT JOIN lease l ON rml.leaid = l.leaid
  OUTER APPLY
            (SELECT TOP(1) *
               FROM dbo.RentalHistory a WITH(NOLOCK)
              WHERE a.resmID = RML.resmID
                AND (l.codeleasestatuscode = '1' AND a.rthDisplayBit='1' OR
                     l.codeleasestatuscode = '2' AND a.rthDisplayBit='0')
           ORDER BY ISNULL(a.rthMoveOutDate, a.rthMoveInDate) DESC
            ) AS RH;