Объявления переменных, использующие предложение WHERE - PullRequest
2 голосов
/ 14 декабря 2011

Таким образом, я относительно новичок в TSQL от Microsoft и пытаюсь написать простой сценарий, основывающий оператор IF на том, больше или меньше сумма столбца TransactionTotal, чем сумма суммы RepairCost за предыдущие 7 дней.

USE MyBusinessDatabase

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

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

Теперь, следующие утверждения Select / Где - это то, где моя проблема.Операторы 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 ]

3 голосов
/ 14 декабря 2011

Вам нужно использовать IS NOT NULL вместо <> NULL.

SQL использует трехзначную логику (True / False / Unknown) и обычные операторы сравнения дают UNKNOWN против NULL.

Предложение WHERE должно иметь значение true, чтобы строка, возвращаемая из запроса, никогда не может произойти с UNKNOWN AND ...

2 голосов
/ 14 декабря 2011

Вы хотите 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'
0 голосов
/ 15 декабря 2011

Возможно, вам понадобятся операторы "GO" после запросов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...