Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите суммировать стоблец.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Добрый день, есть такой запрос:
SELECT  STD.[RepairObject], RR.[Oid] AS [RfidOid],
    STD.[ProductionStart], STD.[ProductionEnd], STD.[TaskStatus], IPR.[Amount]
	,COALESCE ( SUM (CASE WHEN IJ.[Oid] IS NULL THEN ( RF.[Status] /* * STD.[SocketsCount]*/) ELSE (0) END),(0)) AS [status]
--FROM ...
GROUP BY  STD.[RepairObject]
, RR.[Oid], STD.[ProductionStart], STD.[ProductionEnd], STD.[TaskStatus],  IPR.[Amount]


Возвращает такой результат:
RepairObject RfidOid ProductionStart ProductionEnd TaskStatus Amount status
A2027CCB-9EC3-4C56-B190-2418584C90C1 FEFA2C8C-8E84-45EE-9034-656D35C655CC 2019-11-19 07:00:00.000 2019-11-19 19:00:00.000 1 NULL 82
A2027CCB-9EC3-4C56-B190-2418584C90C1 FEFA2C8C-8E84-45EE-9034-656D35C655CC 2019-11-19 07:00:00.000 2019-11-19 19:00:00.000 1 2 0
A2027CCB-9EC3-4C56-B190-2418584C90C1 FEFA2C8C-8E84-45EE-9034-656D35C655CC 2019-11-19 07:00:00.000 2019-11-19 19:00:00.000 1 5 0

Теперь пытаюсь просуммировать [Amount]
Изменяю так:
SELECT  STD.[RepairObject], RR.[Oid] AS [RfidOid],
    STD.[ProductionStart], STD.[ProductionEnd], STD.[TaskStatus], SUM(IPR.[Amount]) AS [Amount]
	,COALESCE ( SUM (CASE WHEN IJ.[Oid] IS NULL THEN ( RF.[Status] /* * STD.[SocketsCount]*/) ELSE (0) END),(0)) AS [status]
-- FROM ...
GROUP BY  STD.[RepairObject]
, RR.[Oid], STD.[ProductionStart], STD.[ProductionEnd], STD.[TaskStatus]--,  IPR.[Amount]

Получаю такой результат:
RepairObject RfidOid ProductionStart ProductionEnd TaskStatus Amount status
A2027CCB-9EC3-4C56-B190-2418584C90C1 FEFA2C8C-8E84-45EE-9034-656D35C655CC 2019-11-19 07:00:00.000 2019-11-19 19:00:00.000 1 58 82


Откуда в [Amount] 58, когда должно быть 7?

В реалиях просто хотел сумму колонки [Amount] прибавить к [Status].
Чтобы в конечном итоге результат был таким:
RepairObject RfidOid ProductionStart ProductionEnd TaskStatus status
A2027CCB-9EC3-4C56-B190-2418584C90C1 FEFA2C8C-8E84-45EE-9034-656D35C655CC 2019-11-19 07:00:00.000 2019-11-19 19:00:00.000 1 89
19 ноя 19, 08:43    [22019307]     Ответить | Цитировать Сообщить модератору
 Re: Помогите суммировать стоблец.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Насколько вот так верно? Результат устраивает

SELECT SUM(tb1.[Amount]) + SUM(tb1.[status]) AS [status]
FROM(
SELECT IPR.[Amount]
	,COALESCE ( SUM (CASE WHEN IJ.[Oid] IS NULL THEN ( RF.[Status]  /* * STD.[SocketsCount]*/) ELSE (0) END),(0)) AS [status]
--FROM ...
GROUP BY  IPR.[Amount]
) AS tb1
19 ноя 19, 08:59    [22019313]     Ответить | Цитировать Сообщить модератору
 Re: Помогите суммировать стоблец.  [new]
L_I_IG
Member

Откуда:
Сообщений: 8
В первом запросе Amount участвует в группировке и то, что вы видите это не сумма. Вы видите, что у вас есть записи в которых Amount = 2 или 5 или Null. А вот во втором запросе вы видите сумму всех Amount.
21 ноя 19, 09:48    [22021496]     Ответить | Цитировать Сообщить модератору
 Re: Помогите суммировать стоблец.  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4386
Hopfen_Artur,

Замените первый запрос на такой:

SELECT  STD.[RepairObject], RR.[Oid] AS [RfidOid],    STD.[ProductionStart], STD.[ProductionEnd], STD.[TaskStatus], 
SUM(IPR.[Amount]) OVER () AS Amount
	,COALESCE ( SUM (CASE WHEN IJ.[Oid] IS NULL THEN ( RF.[Status] /* * STD.[SocketsCount]*/) ELSE (0) END),(0)) AS [status]
FROM ...
GROUP BY  STD.[RepairObject], RR.[Oid], STD.[ProductionStart], STD.[ProductionEnd], STD.[TaskStatus]


Сообщение было отредактировано: 21 ноя 19, 09:57
21 ноя 19, 09:55    [22021505]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить