根据列值从SELECT中删除行

时间:2014-02-25 20:34:55

标签: sql sql-server

我有一个复杂的存储过程,我需要能够隐藏连接到主表的表中的特定行。隐藏此行的标准取决于主表(Orders)中的值(DeductMoney)是否为1.我的存储过程与此类似:

SELECT 
  O.FileNumber
  ,ML.Line
  ,ML.Price
  ,ML.Description
FROM Orders O
INNER JOIN Main M 
  ON O.OrdersID = M.OrdersID 
INNER JOIN MainLine ML
  ON ML.MainID = M.MainID
WHERE 
  M.MainID = @MainID

结果集目前如下所示:

FileNumber | Line | Price | Description
---------------------------------------
0001       | 501  | $200  | DescriptionA
0001       | 502  | $300  | DescriptionB
0001       | 503  | $150  | DescriptionC
0001       | 504  | $100  | DescriptionD
0001       | 505  | $75   | DescriptionE
0001       | 506  | $500  | DescriptionF

现在,从Orders表中,有一个名为DeductMoney的列。此列仅适用于返回结果集的一个特定行,即行506.DeductMoney列可以是0或1,如果它是1,我需要从SQL SELECT中完全删除该行。基本上,如果DeductMoney = 1,则删除第506行存在的行。

遗憾的是,这些数据未传递给SSRS,因此无法在该级别过滤。有没有人想过如何实现这一目标?是否可以通过CASE声明来完成?非常感谢任何帮助!

根据列值

从SELECT中删除行

2 个答案:

答案 0 :(得分:1)

您需要在where子句中添加逻辑:

WHERE M.MainID = @MainID AND
      NOT (Line = 506 and DeductMoney = 1)

答案 1 :(得分:0)

这不会起作用,还是我误读了什么?

SELECT 
  O.FileNumber
  ,ML.Line
  ,ML.Price
  ,ML.Description
FROM Orders O
INNER JOIN Main M 
  ON O.OrdersID = M.OrdersID 
INNER JOIN MainLine ML
  ON ML.MainID = M.MainID
WHERE 
  M.MainID = @MainID
  AND DeductMoney <> 1