【问题标题】:How to ignore 0(zero) values in SQL query?如何忽略 SQL 查询中的 0(零)值?
【发布时间】:2020-02-01 17:55:29
【问题描述】:

例如:

 food fee   admission fee 
 ------------------------
   100          0 
     0        100 
    50         50 
     0          0

我希望查询忽略两个费用字段中的 0(零)值。所以输出应该是

 100     0
   0   100
  50    50 

代码

WITH cteReports AS
(
    SELECT               
        tblStudentFees.AdmissionFee, tblStudentFees.BankFee, 
        tblStudentFees.BookFee, tblStudentFees.ClassName, tblStudentFees.Date, 
        tblStudentFees.DivisionName, tblStudentFees.FoodFee, 
        tblStudentFees.OtherFee, tblStudentFees.OtherFee2, 
        tblStudentFees.StationaryFee, tblStudentFees.StudentFeesId, 
        tblStudentFees.StudentNo, tblStudentFees.Total, tblStudent.Name, 
        users.Username, tblState.StateName, tblStudent.StateId, 
        tblStudent.DistrictId, tblStudent.Name AS Expr1, 
        users.Username AS Expr2, tblStudent.CityName, 
        tblStudentFees.PaymentType, tblStudentFees.AccountNo,
        tblStudent.Study
    FROM 
        tblStudentFees AS tblStudentFees 
    LEFT OUTER JOIN
        tblStudent AS tblStudent ON tblStudent.StudentNo = tblStudentFees.StudentNo 
    LEFT OUTER JOIN
        tblState AS tblState ON tblState.StateId = tblStudent.StateId 
    LEFT OUTER JOIN
        tblUser AS users ON tblStudentFees.InsertBy = users.UserId
    WHERE 
        tblStudentFees.AdmissionFee != 0.00 
        AND tblStudentFees.FoodFee = 0.00 
         OR tblStudentFees.AdmissionFee = 0.00 
        AND tblStudentFees.FoodFee != 0.00 
         OR tblStudentFees.AdmissionFee!= 0.00 
        AND tblStudentFees.FoodFee != 0.00
)
SELECT
    AdmissionFee, FoodFee, BankFee, BookFee, ClassName,
    Date, DivisionName, OtherFee, OtherFee2, 
    StationaryFee, StudentFeesId, StudentNo, Total,
    Name, Username, StateName, StateId, DistrictId,
    Expr1, Expr2, CityName, PaymentType, AccountNo 
FROM 
    cteReports 
WHERE
    CityName LIKE '%' + @SearchTerm + '%' 
    AND Date >= @dtfrom 
    AND Date <= @dtTo 
    AND Study = 'TRUE'

【问题讨论】:

  • 忽略是什么意思?只需将它们替换为 NULL 或 ' ' 或根本不显示它们?
  • 不应该同时显示 0 0
  • 您可以过滤为零的行的总和

标签: asp.net sql-server stored-procedures c#-4.0 left-join


【解决方案1】:

使用 OR 时需要括号。

例如

(tblStudentFees.AdmissionFee != 0.00 
AND tblStudentFees.FoodFee = 0.00) 
 OR (tblStudentFees.AdmissionFee = 0.00 
AND tblStudentFees.FoodFee != 0.00) 
 OR (tblStudentFees.AdmissionFee!= 0.00 
AND tblStudentFees.FoodFee != 0.00)

更简单的写法是:

WHERE NOT (FoodFee = 0 AND AdmissionFee = 0)

【讨论】:

  • 由于逻辑运算符的优先级,我不希望括号是必需的。
  • @DanGuzman 你说得对,我必须自己尝试一下。我认为这是操作顺序错误,但实际上 op 的逻辑在实践中运行良好。现在我对我的结果如何解决任何问题感到困惑,除了可读性。
  • @OwlsSleeping,我也是,但你的答案中不那么冗长的技术也有效。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
相关资源
最近更新 更多