Страницы

Поиск по вопросам

понедельник, 24 сентября 2018 г.

Условные выражения SQL

Для выполнения действий по условию используется выражение IF ... ELSE. SQL Server вычисляет выражение после ключевого слово IF. И если оно истинно, то выполняются инструкции после ключевого слова IF. Если условие ложно, то выполняются инструкции после ключевого слова ELSE.
Если после IF или ELSE располагает блок инструкций, то этот блок заключается между ключевыми словами BEGIN и END:
1
2
3
4
IF условие
    {инструкция|BEGIN...END}
[ELSE
    {инструкция|BEGIN...END}]
Выражение ELSE является необязательным, и его можно опускать.
Например, пусть у нас есть следующие таблицы:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE TABLE Products
(
    Id INT IDENTITY PRIMARY KEY,
    ProductName NVARCHAR(30) NOT NULL,
    Manufacturer NVARCHAR(20) NOT NULL,
    ProductCount INT DEFAULT 0,
    Price MONEY NOT NULL
);
CREATE TABLE Customers
(
    Id INT IDENTITY PRIMARY KEY,
    FirstName NVARCHAR(30) NOT NULL
);
CREATE TABLE Orders
(
    Id INT IDENTITY PRIMARY KEY,
    ProductId INT NOT NULL REFERENCES Products(Id) ON DELETE CASCADE,
    CustomerId INT NOT NULL REFERENCES Customers(Id) ON DELETE CASCADE,
    CreatedAt DATE NOT NULL,
    ProductCount INT DEFAULT 1,
    Price MONEY NOT NULL
);
Таблица Orders представляет заказы, а столбец CreatedAt - дату заказов. Узнаем, были ли заказы за последние 10 дней:
1
2
3
4
5
6
DECLARE @lastDate DATE
SELECT @lastDate = MAX(CreatedAt) FROM Orders
IF DATEDIFF(day, @lastDate, GETDATE()) > 10
    PRINT 'За последние десять дней не было заказов'
Добавим выражение ELSE:
1
2
3
4
5
6
7
8
DECLARE @lastDate DATE
SELECT @lastDate = MAX(CreatedAt) FROM Orders
IF DATEDIFF(day, @lastDate, GETDATE()) > 10
    PRINT 'За последние десять дней не было заказов'
ELSE
    PRINT 'За последние десять дней были заказы'
Выражение IF...ELSE в T-SQL и MS SQL Server
Если после IF или ELSE идут две и более инструкций, то они заключаются в блок BEGIN...END:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE @lastDate DATE, @count INT, @sum MONEY
SELECT @lastDate = MAX(CreatedAt),
        @count = SUM(ProductCount) ,
        @sum = SUM(ProductCount * Price)
FROM Orders
IF @count > 0
    BEGIN
        PRINT 'Дата последнего заказа: ' + CONVERT(NVARCHAR, @lastDate)
        PRINT 'Продано ' + CONVERT(NVARCHAR, @count) + ' единиц(ы)'
        PRINT 'На общую сумму ' + CONVERT(NVARCHAR, @sum)
    END;
ELSE
    PRINT 'Заказы в базе данных отсутствуют'
Выражение BEGIN...END в T-SQL и MS SQL Server

Комментариев нет:

Отправить комментарий