+ (сложение) (Transact-SQL)
складывает два числа. С помощью этого арифметического оператора сложения можно также прибавлять число дней к дате.
Синтаксис
expression + expression
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
выражение
Любое допустимое выражение expression одного из типов данных числовой категории, кроме типа данных bit. Нельзя использовать с типами данных date, time, datetime2 или datetimeoffset.
Типы результата
Возвращает результат типа данных аргумента с более высоким приоритетом. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).
Примеры
А. Использование оператора сложения для вычисления общего числа часов отсутствия на рабочем месте для каждого сотрудника.
В этом примере приведен расчет общего времени отсутствия на рабочем месте (в часах) для каждого сотрудника путем сложения отпускных часов и часов отсутствия по болезни.
-- Uses AdventureWorks SELECT p.FirstName, p.LastName, VacationHours, SickLeaveHours, VacationHours + SickLeaveHours AS 'Total Hours Away' FROM HumanResources.Employee AS e JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ORDER BY 'Total Hours Away' ASC; GO
B. Использование оператора сложения для добавления дней к значениям даты и часа
В этом примере число дней прибавляется к дате типа datetime .
SET NOCOUNT ON DECLARE @startdate DATETIME, @adddays INT; SET @startdate = 'January 10, 1900 12:00 AM'; SET @adddays = 5; SET NOCOUNT OFF; SELECT @startdate + 1.25 AS 'Start Date', @startdate + @adddays AS 'Add Date';
Start Date Add Date --------------------------- --------------------------- 1900-01-11 06:00:00.000 1900-01-15 00:00:00.000 (1 row(s) affected)
C. Сложение данных символьного и целочисленного типов
В приведенном ниже примере складываются значения типа int и символьного типа путем преобразования данных символьного типа в тип int. Если в строке типа char есть недопустимый символ, Transact-SQL возвращает ошибку.
DECLARE @addvalue INT; SET @addvalue = 15; SELECT '125127' + @addvalue;
----------------------- 125142 (1 row(s) affected)
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
Г. Использование оператора сложения для вычисления общего числа часов отсутствия на рабочем месте для каждого сотрудника
В приведенном ниже примере приведен расчет общего времени отсутствия на рабочем месте (в часах) для каждого сотрудника путем сложения отпускных часов и часов отсутствия по болезни, причем результаты сортируются по возрастанию.
-- Uses AdventureWorks SELECT FirstName, LastName, VacationHours, SickLeaveHours, VacationHours + SickLeaveHours AS TotalHoursAway FROM DimEmployee ORDER BY TotalHoursAway ASC;
SQL — Урок 11. Итоговые функции, вычисляемые столбцы и представления
Теперь, мы хотим узнать, на какую сумму нам привез товар поставщик «Дом печати» (id=2). Составить такой запрос не так просто. Давайте поразмышляем, как его составить:
1. Сначала надо из таблицы Поставки (incoming) выбрать идентификаторы (id_incoming) тех поставок, которые осуществлялись поставщиком «Дом печати» (id=2):
SELECT id_incoming FROM incoming WHERE id_vendor=2;
2. Теперь из таблицы Журнал поставок (magazine_incoming) надо выбрать товары (id_product) и их количества (quantity), которые осуществлялись в найденных в пункте 1 поставках. То есть запрос из пункта 1 становится вложенным:
SELECT id_product, quantity FROM magazine_incoming WHERE id_incoming=(SELECT id_incoming FROM incoming WHERE id_vendor=2);
3. Теперь нам надо добавить в результирующую таблицу цены на найденные товары, которые хранятся в таблице Цены (prices). То есть нам понадобится объединение таблиц Журнал поставок (magazine_incoming) и Цены (prices) по столбцу id_product:
SELECT magazine_incoming.id_product, magazine_incoming.quantity, prices.price FROM magazine_incoming, prices WHERE magazine_incoming.id_product= prices.id_product AND id_incoming= (SELECT id_incoming FROM incoming WHERE id_vendor=2);
4. В получившейся таблице явно не хватает столбца Сумма, то есть вычисляемого столбца . Возможность создания таких столбцов предусмотрена в MySQL. Для этого надо лишь указать в запросе имя вычисляемого столбца и что он должен вычислять. В нашем примере такой столбец будет называться summa, а вычислять он будет произведение столбцов quantity и price. Название нового столбца отделяется словом AS:
SELECT magazine_incoming.id_product, magazine_incoming.quantity, prices.price, magazine_incoming.quantity*prices.price AS summa FROM magazine_incoming, prices WHERE magazine_incoming.id_product= prices.id_product AND id_incoming= (SELECT id_incoming FROM incoming WHERE id_vendor=2);
5. Отлично, нам осталось лишь просуммировать столбец summa и наконец-то узнаем, на какую сумму нам привез товар поставщик «Дом печати». Синтаксис для использования функции SUM() следущий:
SELECT SUM(имя_столбца) FROM имя_таблицы;
Имя столбца нам известно — summa, а вот имени таблицы у нас нет, так как она является результатом запроса. Что же делать? Для таких случаев в MySQL существуют Представления . Представление — это запрос на выборку, которому присваивается уникальное имя и который можно сохранять в базе данных, для последующего использования.
Синтаксис создания представления следующий:
CREATE VIEW имя_представления AS запрос;
Давайте сохраним наш запрос, как представление с именем report_vendor:
CREATE VIEW report_vendor AS SELECT magazine_incoming.id_product, magazine_incoming.quantity, prices.price, magazine_incoming.quantity*prices.price AS summa FROM magazine_incoming, prices WHERE magazine_incoming.id_product= prices.id_product AND id_incoming= (SELECT id_incoming FROM incoming WHERE id_vendor=2);
6. Вот теперь можно использовать итоговую функцию SUM() :
SELECT SUM(summa) FROM report_vendor;
Вот мы и достигли результата, правда для этого нам пришлось использовать вложенные запросы, объединения, вычисляемые столбцы и представления. Да, иногда для получения результата приходится подумать, без этого никуда. Зато мы коснулись двух очень важных тем — вычисляемые столбцы и представления. Давайте поговорим о них поподробнее.
Вычисляемые поля (столбцы)
На примере мы рассмотрели сегодня математическое вычисляемое поле. Здесь хотелось бы добавить, что использовать можно не только операцию умножения (*), но и вычитание (-), и сложение (+), и деление (/). Синтаксис следующий:
SELECT имя_столбца_1, имя_столбца_2, имя_столбца_1*имя_столбца_2 AS имя_вычисляемого_столбца FROM имя_таблицы;
Второй нюанс — ключевое слово AS, мы его использовали для задания имени вычисляемого столбца. На самом деле с помощью этого ключевого слова задаются псевдонимы для любых столбцов. Зачем это нужно? Для сокращения и читаемости кода. Например, наше представление могло бы выглядеть так:
CREATE VIEW report_vendor AS SELECT A.id_product, A.quantity, B.price, A.quantity*B.price AS summa FROM magazine_incoming AS A, prices AS B WHERE A.id_product= B.id_product AND id_incoming= (SELECT id_incoming FROM incoming WHERE id_vendor=2);
Согласитесь, что так гораздо короче и понятнее.
Представления
Синтаксис создания представлений мы уже рассматривали. После создания представлений, их можно использовать так же, как таблицы. То есть выполнять запросы к ним, фильтровать и сортировать данные, объединять одни представления с другими. С одной стороны это очень удобный способ хранения частоприменяемых сложных запросов (как в нашем примере).
Но следует помнить, что представления — это не таблицы, то есть они не хранят данные, а лишь извлекают их из других таблиц. Отсюда, во-первых, при изменении данных в таблицах, результаты представления так же будут меняться. А во-вторых, при запросе к представлению происходит поиск необходимых данных, то есть производительность СУБД снижается. Поэтому злоупотреблять ими не стоит.
Научись программировать на Python прямо сейчас!
- Научись программировать на Python прямо сейчас
- Бесплатный курс
Если этот сайт оказался вам полезен, пожалуйста, посмотрите другие наши статьи и разделы.
Указание вычисляемых столбцов в таблице
Вычисляемый столбец представляет собой виртуальный столбец, физически не хранящийся в таблице, если для него не установлен признак PERSISTED. В выражении вычисляемого столбца для вычисления значения могут использоваться данные из других столбцов. Вы можете указать выражение для вычисляемого столбца в SQL Server с помощью SQL Server Management Studio (SSMS) или Transact-SQL (T-SQL).
Ограничения
- Вычисляемый столбец нельзя использовать в качестве определения ограничения DEFAULT или FOREIGN KEY или с определением ограничения NOT NULL. Однако если вычисляемый столбец определен детерминированным выражением и тип данных результата допускается для индексных столбцов, то вычисляемый столбец может быть использован как ключевой столбец в индексе или как часть ограничений PRIMARY KEY или UNIQUE. Например, если в таблице есть целые столбцы a и b, вычисляемый столбец a + b может быть индексирован, но вычисляемый столбец + DATEPART(dd, GETDATE()) не может быть индексирован, так как значение может измениться в последующих вызовах.
- Вычисляемый столбец не может быть целевым столбцом инструкций INSERT или UPDATE.
- SET QUOTED_IDENTIFIER при создании или изменении индексов в вычисляемых столбцах или индексированных представлениях должно быть включено. Дополнительные сведения см. в статье SET QUOTED_IDENTIFIER (Transact-SQL).
Разрешения
Требуется разрешение ALTER на таблицу.
Использование среды SQL Server Management Studio
Добавление нового вычисляемого столбца
- В обозревателе объектовразверните таблицу, в которую нужно добавить новый вычисляемый столбец. Щелкните правой кнопкой мыши Столбцы и выберите Создать столбец.
- Введите имя столбца и выберите тип данных по умолчанию (nchar(10)). Ядро СУБД определяет тип данных вычисляемого столбца, применяя правила приоритета типа данных к выражениям, указанным в формуле. Например, если формула ссылается на столбец типа money и столбец типа int, то вычисляемый столбец имеет тип money , поскольку этот тип данных имеет более высокий приоритет. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).
- На вкладке Свойства столбца раскройте свойство Спецификация вычисляемого столбца .
- В дочернем свойстве (Формула) введите выражение для этого столбца в ячейку сетки справа. Например, в столбце SalesTotal можно ввести формулу SubTotal+TaxAmt+Freight , чтобы добавить значения в этих столбцах для каждой строки в таблице.
Внимание Если формула связывает два выражения различных типов данных, то по правилам приоритета типов данных определяется, какой тип данных имеет меньший приоритет и будет преобразован в тип данных с большим приоритетом. Если преобразование не поддерживается неявным преобразованием, возвращается ошибка Error validating the formula for column column_name. . Используйте функцию CAST или CONVERT, чтобы устранить конфликт типа данных. Например, если столбец типа nvarchar объединяется со столбцом типа int, то целочисленный тип необходимо преобразовать в nvarchar , как показано в следующей формуле: (‘Prod’+CONVERT(nvarchar(23),ProductID)) . Дополнительные сведения см. в разделе Функции CAST и CONVERT (Transact-SQL).
Добавление определения вычисляемого столбца к существующему столбцу
- В обозревателе объектовщелкните правой кнопкой мыши таблицу со столбцом, определение которого необходимо изменить, и разверните папку Столбцы .
- Щелкните правой кнопкой мыши столбец, для которого необходимо задать формулу вычисляемого столбца, и выберите пункт Удалить. Нажмите ОК.
- Добавьте новый столбец и укажите формулу вычисляемого столбца в соответствии с предыдущей процедурой, чтобы добавить новый вычисляемый столбец.
Использование Transact-SQL
Добавление вычисляемого столбца при создании таблицы
В следующем примере создается таблица с вычисляемым столбцом, который умножает значение столбца QtyAvailable на значение, указанное в столбце UnitPrice .
CREATE TABLE dbo.Products ( ProductID int IDENTITY (1,1) NOT NULL , QtyAvailable smallint , UnitPrice money , InventoryValue AS QtyAvailable * UnitPrice ); -- Insert values into the table. INSERT INTO dbo.Products (QtyAvailable, UnitPrice) VALUES (25, 2.00), (10, 1.5); -- Display the rows in the table. SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue FROM dbo.Products; -- Update values in the table. UPDATE dbo.Products SET UnitPrice = 2.5 WHERE ProductID = 1; -- Display the rows in the table, and the new values for UnitPrice and InventoryValue. SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue FROM dbo.Products;
Добавление нового вычисляемого столбца в существующую таблицу
В следующем примере в таблицу, созданную в предыдущем примере, будет добавлен новый столбец.
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);
При необходимости добавьте аргумент PERSISTED, чтобы физически хранить вычисляемые значения в таблице:
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) PERSISTED;
Замена существующего столбца на вычисляемый столбец
В следующем примере изменяется столбец, добавленный в предыдущем примере.
ALTER TABLE dbo.Products DROP COLUMN RetailValue; GO ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5); GO
Далее
- Инструкция ALTER TABLE (Transact-SQL)
- ALTER TABLE computed_column_definition (Transact-SQL)
Как сделать сумму двух столбцов в SQL и вывести новый столбец с результатами этих сумм
В этой таблице мне необходимо добавить новый столбик с результатами суммы двух столбцов Math и Rus для каждой строчки. Как это сделать?
Отслеживать
задан 26 апр 2020 в 12:04
voooooooojyay voooooooojyay
1 1 1 золотой знак 1 1 серебряный знак 1 1 бронзовый знак
Обычно все пишут сумму всего столбца. а мне надо для каждой строчки по отдельности
26 апр 2020 в 12:32
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
SELECT *, (Math + Rus) as summ FROM tabl;
Если вы имеете ввиду столбик, который сам будет рассчитываться, вот пример использования виртуального столбца(был ответ где-то, но я его потерял):
create table t ( num1 int, num2 int, sum int as (num1 + num2)) ; insert into t (num1, num2) values (1, 2); select * from t;
Выведет 1(num1), 2(num2), 3(sum)