如何根据跨国表中的值仅选择一个列结果?

时间:2014-06-04 14:25:15

标签: sql sql-server transactional-database

我在物品表中有许多可供出租的物品。我有一个跨国表格,显示我的项目表中每个项目的租赁历史记录。如果该项目当前未被租用,那么"可用性状态"专栏将说'关闭'。如果该项目正在租用"可用性状态"中的一个字段;专栏将说" ONRENT"。我想写一个查询,列出每个租赁项目并返回它们当前是否是" ONRENT" (不可用)或" CLOSED" (可用的)。我写了一个查询,返回的租约是" ONRENT"因为我的WHERE子句可以找到唯一包含" ONRENT"的行。不知道如何在"可用性状态"中的所有行返回可用项目。专栏说" CLOSED"这是我对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%'

2 个答案:

答案 0 :(得分: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) 

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

答案 1 :(得分: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'数据,以及其他条件。< / p>