2011-12-14 14 views
2

MicrosoftのTSQLには比較的新しいので、TransactionTotal列の合計がRepairCostの合計よりも大きいか小さいかをIF文に基づいた簡単なスクリプトを記述しようとしています。前の7日間。WHERE句を使用した変数宣言

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データベースクラスがひどく冗長で退屈であることを発見し、それを取り除くことがうれしいです!私はそれを楽しむことができると思っていますが、私のアルゴリズムと数学のコースでは時間を食い物にしているので、クラスには本当に苦労しました。

+0

「IS NOT NULL」ではなく、「<>」ではありません – JonH

+0

私のコメントは以下の通りですか? – JonH

答えて

3

<> NULLではなくIS NOT NULLを使用する必要があります。

SQLはthree valued logic(真/偽/不明)を使用し、通常の比較演算子はUNKNOWNに対してNULLを返します。

WHERE句は、あなたがIS NOT NULLはとてもそれを変更しませ<>たいUNKNOWN AND ...

+0

-1ジョーCelkoによって記事へのリンクのため...ちょうど冗談:)。 – JonH

+0

ブックマーク済み!助けをいただきありがとうございました。その記事の説明は私のテキストよりも無限に役立ちました。 – insomniac

2

で起こることはできません、クエリから返される行に対してtrueに評価する必要があります。

あなたのコードはなってしまう:

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' 
+0

レスポンスありがとうございますが、コードはIF文を使って何かを印刷するのに失敗しています...システムは何のエラーも出ません。 – insomniac

+0

私は@WeekPast変数の宣言を含めるのを忘れてしまったことを知りました。それは今私の元の投稿に含まれています。それは間違っていますか? – insomniac

+0

サンプルデータを使用すると、私にとってはうまくいきます。 'IF @TotalSales> @TotalServes SELECT 'Hello World'' – JonH

0

あなたは、クエリの後の文を "GO" が必要になる場合がありますか?

+0

あなたは別のDBコンテキストにいない限り、必須ではありません。 – JonH

関連する問題