使用WHERE子句的变量声明

时间:2011-12-14 19:46:03

标签: sql tsql

所以我对微软的TSQL比较陌生,我正在尝试编写一个简单的脚本,该脚本基于IFT声明是否为TransactionTotal列的总和是否大于或小于之前7天的RepairCost总和。 / p>

USE MyBusinessDatabase

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

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

现在,以下Select / Where语句是我的问题所在。 Select语句定义了我的TotalSales和TotalServices变量,在我添加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数据库类非常冗余和无聊,我很高兴摆脱它!我觉得我可以享受它,但我真的在课堂上挣扎,因为我的算法和数学课程花了我的时间,这是事后的想法。

3 个答案:

答案 0 :(得分:3)

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

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

对于要从查询返回的行,WHERE子句需要求值为true,UNKNOWN AND ...

永远不会发生这种情况

答案 1 :(得分:2)

您希望IS NOT NULL而非<>进行更改。

您的代码最终成为:

SELECT @TotalSales = ISNULL(SUM(TransactionTotal), 0) FROM Sales
WHERE TransactionDate IS NOT NULL AND PaymentDate > @WeekPast

SELECT @TotalServices = ISNULL(SUM(PaymentTotal), 0) FROM ServiceInvoices
WHERE PaymentDate IS NOT NULL AND PaymentDate > @WeekPast

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

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

ELSE
PRINT 'Total Sales = Total Services'

答案 2 :(得分:0)

查询后您可能需要“GO”语句吗?