sql - 使用 WHERE 子句的变量声明

标签 sql t-sql

所以我对 Microsoft 的 TSQL 比较陌生,我正在尝试编写一个简单的脚本,该脚本基于 IF 语句,判断 TransactionTotal 列的总和是否大于或小于前 7 天的 RepairCost 的总和。

USE MyBusinessDatabase

DECLARE @TotalSales money
DECLARE @TotalServices money
DECLARE @WeekPast date

SELECT @WeekPast = DATEADD(day, -7, GetDate())

现在,以下 Select/Where 语句是我的问题所在。定义 TotalSales 和 TotalServices 变量的 Select 语句可以正常工作,直到我添加Where 语句。从我所学到的来看,这些看起来是正确的,但是当我将它们添加到代码中时,我的 IF 语句停止工作。

SELECT @TotalSales = SUM(TransactionTotal) FROM Sales
WHERE TransactionDate <> NULL AND PaymentDate > @WeekPast

SELECT @TotalServices = SUM(PaymentTotal) FROM ServiceInvoices
WHERE PaymentDate <> NULL AND PaymentDate > @WeekPast

IF @TotalSales > @TotalServices
PRINT 'Total Sales > Total Services'

IF @TotalSales < @TotalServices
PRINT 'Total Sales < Total Services'

IF @TotalSales = @TotalServices
PRINT 'Total Sales = Total Services'

非常感谢,如果我可以帮助澄清任何事情,请告诉我! PS 作为我的数据结构 C/C++ 类的忠实粉丝,我发现这个 SQL 数据库类非常冗余和无聊,我很高兴摆脱它!我觉得我可以享受它,但我真的很难适应这门课,因为它是我的算法和数学类(class)占用我时间的事后想法。

最佳答案

您需要使用IS NOT NULL而不是<> NULL .

SQL 使用three valued logic (真/假/未知)和普通比较运算符产生 UNKNOWN反对NULL

WHERE子句需要评估为 true 才能从查询返回一行,而 UNKNOWN AND ... 永远不会发生这种情况

关于sql - 使用 WHERE 子句的变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8510667/

相关文章:

sql-server - 将多个日期字段连接到日历表

MySQL 使用 Group By 选择最大出现次数

mysql - 为什么 MySQL 查询中的三行顺序不正确?

mysql - 'where-clause' 中的未知列

sql - 使用当前行值更新变量

sql-server-2005 - 使用开放查询功能从sql server执行oracle存储过程

sql - 记录不同种类的 INSERT 语句

sql-server - 在 SQL Server 中的 Group By 中传递变量

java - 与字符串字段的多对一关系

mysql - CodeIgniter 事件记录;将两个查询合并为一个?