0

我在一个项目表中有许多要出租的项目。我有一个跨国表,显示了我的项目表中每个项目的租赁历史。如果该项目当前未出租,则“可用性状态”列中的所有条目都将显示“已关闭”。如果该项目正在租用,“可用性状态”列中的一个字段将显示“ONRENT”。我想编写一个查询,列出每个出租项目并返回它们当前是“ONRENT”(不可用)还是“CLOSED”(可用)。我编写了一个查询,它返回“ONRENT”的租赁项目,因为我的 WHERE 子句可以找到唯一包含“ONRENT”的行。当“可用性状态”列中的所有行都显示“已关闭”时,不确定如何返回可用项目

select      rl.[No_],
        rl.[Manufacturer Code],
        rl.[Model Code],
        rl.[Availability Status],
        rl.[Start Date],
        rh.[Order Date],
        rh.[No_],
        rh.[Ship-to Name],
        rh.[Ship-to Address]

from        [LIVE$Rental Line]rl left outer join [LIVE$Rental Header]rh 
on rl.[Document No_] = rh.[No_]
where       rl.[Availability Status] = 'ONRENT'
and         rl.[No_] not like 'SR%'
4

2 回答 2

0

为了清楚起见,我稍微简化了您的用例。您似乎正在寻找的是这样的:

SELECT distinct no, 'CLOSED' FROM table1 t1
WHERE EXISTS (SELECT * FROM table1 WHERE status = 'CLOSED' AND no = t1.no)
UNION
SELECT distinct no, 'OPEN' FROM table1 t2
WHERE NOT EXISTS (SELECT * FROM table1 WHERE status = 'CLOSED' AND no = t2.no) 

我应该补充一点,有很多方法可以解决这个问题,其中一些可能比这个更有效。

于 2014-06-04T14:32:31.807 回答
0

如果你只是切换你的加入,

SELECT
            rl.[No_],
            rl.[Manufacturer Code],
            rl.[Model Code],
            COALESCE(rl.[Availability Status], 'CLOSED') [Availability Status],
            rl.[Start Date],
            rh.[Order Date],
            rh.[No_],
            rh.[Ship-to Name],
            rh.[Ship-to Address]
    FROM
            [LIVE$Rental Header] rh
        LEFT OUTER JOIN
            [LIVE$Rental Line] rl  
                ON
                        rl.[Document No_] = rh.[No_]
                    AND
                        rl.[Availability Status] = 'ONRENT'
    WHERE
            rl.[No_] not like 'SR%';

然后你会得到所有的[LIVE$Rental Header],你只会得到[LIVE$Rental Line]相关行的数据'ONRENT',以及你的其他条件。

于 2014-06-04T14:44:24.273 回答