Як підсумувати два поля в запиті SQL


84

Мені потрібно отримати загальну суму двох полів, що знаходяться в одному рядку, і ввести це число в поле в кінці того самого рядка.

Це мій код.

Sum(tbl1.fld1 + tbl1.fld2) AS [Total]

Це те, для чого використовується функція SUM, або ви можете використовувати функцію SUM лише для отримання загальної суми стовпця?

Дякую

Відповіді:


204

SUMє сукупною функцією. Він розрахує загальну суму для кожної групи. +використовується для обчислення двох або більше стовпців поспіль.

Розглянемо цей приклад,

ID  VALUE1  VALUE2
===================
1   1       2
1   2       2
2   3       4
2   4       5

 

SELECT  ID, SUM(VALUE1), SUM(VALUE2)
FROM    tableName
GROUP   BY ID

приведе

ID, SUM(VALUE1), SUM(VALUE2)
1   3           4
2   7           9

 

SELECT  ID, VALUE1 + VALUE2
FROM    TableName

приведе

ID, VALUE1 + VALUE2
1   3
1   4
2   7
2   9

 

SELECT  ID, SUM(VALUE1 + VALUE2)
FROM    tableName
GROUP   BY ID

приведе

ID, SUM(VALUE1 + VALUE2)
1   7
2   16

10
Ця відповідь не є складною, але простою і настільки детальною, наскільки це необхідно. Хороший!
Bitterblue

1
Слава Джону, можливо найкращий спосіб відповісти на це питання!
Абхіджіт

29

Спробуйте наступне:

SELECT *, (FieldA + FieldB) AS Sum
FROM Table

перетворення в int також може бути важливим, якщо поля є варчарами, що містять
ints

@Obl Tobl Я хочу, щоб сума стовпців була динамічною
Прашант Пімпале,

7

SUM використовується для підсумовування значень у стовпці для декількох рядків. Ви можете просто додати свої стовпці разом:

select tblExportVertexCompliance.TotalDaysOnIncivek + tblExportVertexCompliance.IncivekDaysOtherSource AS [Total Days on Incivek]

7
ID  VALUE1  VALUE2
===================
1   1       2

1   2       2
2   3       4
2   4       5

select ID, (coalesce(VALUE1 ,0) + coalesce(VALUE2 ,0) as Total from TableName

5

Через те, що мої бали репутації менше 50, я не міг коментувати або голосувати за відповідь E Coder вище. Це найкращий спосіб зробити це, щоб вам не потрібно було використовувати групу, оскільки у мене була подібна проблема.
Якщо виконати SUM((coalesce(VALUE1 ,0)) + (coalesce(VALUE2 ,0)))як Total, ви отримаєте потрібне число, а також позбавите вас будь-якої помилки за невиконання групи. Це був мій запит, який дав мені загальну кількість і загальну суму для кожного дилера, а потім дав мені проміжну суму для позик дилерів якості та ризику.

SELECT 
    DISTINCT STEP1.DEALER_NBR
    ,COUNT(*) AS DLR_TOT_CNT
    ,SUM((COALESCE(DLR_QLTY,0))+(COALESCE(DLR_RISKY,0))) AS DLR_TOT_AMT
    ,COUNT(STEP1.DLR_QLTY) AS DLR_QLTY_CNT
    ,SUM(STEP1.DLR_QLTY) AS DLR_QLTY_AMT
    ,COUNT(STEP1.DLR_RISKY) AS DLR_RISKY_CNT
    ,SUM(STEP1.DLR_RISKY) AS DLR_RISKY_AMT
    FROM STEP1
    WHERE DLR_QLTY IS NOT NULL OR DLR_RISKY IS NOT NULL
        GROUP BY STEP1.DEALER_NBR

4

Функція sum отримує лише загальну кількість стовпців. Для того, щоб підсумувати два значення з різних стовпців, перетворіть значення в int і складіть їх за допомогою + -Оператора

Select (convert(int, col1)+convert(int, col2)) as summed from tbl1

Сподіваюся, що це допомагає.


3

Якщо ви хочете скласти два стовпці разом, все, що вам потрібно зробити, це додати їх. Тоді ви отримаєте суму цих двох стовпців для кожного рядка, що повертається запитом.

Що робить ваш код, це додавання двох стовпців разом, а потім отримання суми сум. Це буде працювати, але це може бути не те, що ви намагаєтесь досягти.


3

Просто нагадування про додавання стовпців. Якщо одне зі значень NULL, загальна кількість цих стовпців стає NULL. Отже, чому деякі плакати рекомендують злиття з другим параметром 0

Я знаю, що це була давня публікація, але я хотів додати це для повноти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.