2016-12-24 34 views
2

我道歉,我的问题看起来很奇怪,希望当我解释那么这将是可以理解的......如何在选择语句期间不根据条件从列中选择数据?如果

我有这样的select语句

select 
    cax.CustomerID, 
    cax.AddressID, 
    c.YearBuilt, 
    a.Line1, 
    a.Line2, 
    a.City, 
    a.ZipCode, 
    a.StateID, 
    a.SubDivision, 
    s.Directions 
from [CustomerAddressXREF] cax 
inner join [Customer] c on c.CustomerID = cax.CustomerID 
inner join [Address] a on a.AddressID = cax.AddressID 
inner join [SubDivision] s on s.SubDivisionName = a.SubDivision 
where cax.CustomerID = 11 

其返回以下数据 returned data

我知道问题出现在SubDivision列中。如果我注释掉a.SubDivision和s.Directions,那么我得到1行返回,这是它应该基于该语句。我想要做的是如果a。SubDivision = N/A,那么我不想将它包含在查询或s.Directions中。

我不知道从哪里开始或从哪里开始将其关闭。是否有可能做什么,我希望做

编辑

我找的结果是这样的

Expected result

所以,如果分区列包含N/A,那么它赢得不要选择细分或路线

+0

只需在你的WHERE子句中加上这个:'AND s.subdivision <>'N/A'' – scsimon

+1

@scsimon我询问了示例数据因为我认为OP不能问* this *。 :D – GurV

+0

@GurwinderSingh我重读了几次,因为我以为同样的事情,但没有看到它任何其他方式 – scsimon

回答

4

目前尚不清楚你想要返回什么结果,所以我们只是猜测。

基于规范,省略的a.SubDivisiona.Directions值,并取代那些具有NULL值...

更改此:

inner join [SubDivision] s on s.SubDivisionName = a.SubDivision 

要这样:

LEFT 
    JOIN [SubDivision] s 
    ON a.SubDivision = s.SubDivisionName 
    AND a.SubDivision <> 'N/A' 

或与此(略有不同但等同):

LEFT 
    JOIN [SubDivision] s 
    ON s.SubDivisionName = a.SubDivision 
    AND s.SubDivisionName <> 'N/A' 
+0

我只是做了一个编辑,希望它更清楚..我试过你的建议,它给了我相同的结果 – Chris

+0

这样做的伎俩,现在它返回一排。谢谢,非常感谢,无论如何,你可以解释为什么你的答案有效? – Chris

+2

说明:即使在右侧的表中找不到“匹配”行,a * left outer * join也会返回左侧表中的行。我们在ON子句中添加了一个条件,以便SubDivision中具有'N/A'的行不会被认为是匹配的。 – spencer7593