2013-04-16 107 views
6

我想在我的where子句中做某种“if”语句。我意识到,SQL不支持这一点,但我相信必须有一些方法使这个工作与SQL语法。正如我用粗体显示的区域所示,我试图找到所有以d开头的项目,并将它们过滤掉,如果它们的userfld2也=容器。做一个“如果”类型的语句在sql where子句

有没有更合理的方式来做到这一点比我做的还是我的方式离开了商标?

在此先感谢。

Select a.ItemID 
    , b.ConversionFactor VCaseAmt 
    , sum(c.ConversionFactor + 1) SCaseAmt 
    , a.status 
    , a.UserFld2 
From timItem a 
inner join timItemUnitOfMeas b on a.ItemKey = b.ItemKey 
    and b.TargetUnitMeasKey = 115 
left join timItemUnitOfMeas c on a.ItemKey = c.ItemKey 
    and c.TargetUnitMeasKey = 116 
left join timItemUnitOfMeas d on a.ItemKey = d.ItemKey 
    and d.TargetUnitMeasKey = 126 
Where d.TargetUnitMeasKey is null 
    and b.ConversionFactor != c.ConversionFactor + 1 
    and a.Status = 1 
    and **(filter a.itemid not like 'd%' when a.userfld2 = 'Container')** 
Group by a.ItemID, b.TargetUnitMeasKey, b.ConversionFactor, C.TargetUnitMeasKey 
    , c.ConversionFactor, a.status, a.UserFld2 
Order by a.ItemID 
+1

过滤a.itemid不喜欢 'd%' **和** a.userfld2 = '集装箱'? – NINCOMPOOP

回答

1

使用此:

Select a.ItemID, b.ConversionFactor VCaseAmt, sum(c.ConversionFactor + 1) SCaseAmt, a.status, a.UserFld2 

From timItem a inner join 
    timItemUnitOfMeas b on a.ItemKey = b.ItemKey and b.TargetUnitMeasKey = 115 left join 
    timItemUnitOfMeas c on a.ItemKey = c.ItemKey and c.TargetUnitMeasKey = 116 left join 
    timItemUnitOfMeas d on a.ItemKey = d.ItemKey and d.TargetUnitMeasKey = 126 

Where d.TargetUnitMeasKey is null and b.ConversionFactor != c.ConversionFactor + 1 and a.Status = 1 and 
not (a.itemid like 'd%' AND a.userfld2 = 'Container') 

Group by a.ItemID, b.TargetUnitMeasKey, b.ConversionFactor, C.TargetUnitMeasKey, c.ConversionFactor, a.status, a.UserFld2 

Order by a.ItemID 
+0

宾果。就是这样。我花了几个小时试图让它工作,令人沮丧。不过非常感谢。 – Aarmora