Я хотел бы попросить небольшую помощь в SQL Server.
Мне нужно суммировать $ вещи, которые купил клиент.
Мой подзапрос суммирует только сумму всей таблицы, но мне нужно что-то вроде
Numero D TotalItem TotalBOUGHT
-----------------------------------------------
111 800 1200
111 200 1200
111 100 1200
111 100 1200
455 200 300
455 100 300
это мой код
SELECT
NumeroD, Descrip AS ClientName, CodClie AS ID,
Descrip1 AS Description, TotalItem, CodUbic,
Día_Transaccion AS Day, Mes AS Month, ANO AS YEAR,
(SELECT SUM(TotalItem) FROM FORMULAFINAL) AS TotalAmount
FROM
FORMULAFINAL
WHERE
Descrip LIKE 'Hector%'
GROUP BY
TotalItem, NumeroD, Descrip, CodClie, Descrip1,
TotalItem, CodUbic, Día_Transaccion, Mes, Ano
ORDER BY
Ano DESC, NumeroD, Descrip, Descrip1, CodClie, TotalItem,
CodUbic, Día_Transaccion, Mes
Ошибка Larnu извините, я использую SQL Server
Кроме того, почему GROUP BY
; запрос с GROUP BY
не имеет агрегации.
Я подозреваю, что вам действительно нужен оконный SUM
, а не группировка.
Вы правы, я удалил фрагмент Group By, я оставил его там, потому что раньше я его использовал.
Мне нужно суммировать TotalID по "NumeroD" и "Day" транзакции
Возможно, используйте оконные функции, как показано ниже.
select
NumeroD, Descrip AS ClientName, CodClie AS ID, Descrip1 AS Description, TotalItem, CodUbic, Día_Transaccion AS Day, Mes AS Month, ANO AS YEAR,
SUM(TotalItem) OVER (partition by NumeroD, DAY, MONTH, YEAR ) AS TotalAmount
FROM FORMULAFINAL
WHERE Descrip LIKE 'Hector%'
ORDER BY Ano DESC, NumeroD, Descrip, Descrip1, CodClie, TotalItem, CodUbic, Día_Transaccion, Mes
Да, это сработало, я сделал это так, но только с OVER (NumeroD), теперь я хочу подсчитать «NumeroD» по имени клиента, чтобы узнать, сколько раз клиент покупал в магазине, у вас есть идеи? ? .... Большое спасибо.
@ArnaldoData Добавьте еще один столбец для выбора, например SUM(TotalItem) OVER (partition by NumeroD, DAY, MONTH, YEAR ) AS TotalAmount, COUNT(DISTINCT NumeroD) OVER ( partition by Descrip ) FROM FORMULAFINAL
Я не могу проголосовать из-за репутации :c, но я выбираю это как правильный ответ. Ты хоть представляешь, как считать поля, о которых я писал тебе ранее?
@ArnaldoData Посмотрите на мой комментарий выше
Извините, я не видел ваш последний ответ.... SQL SERVER сказал мне, что я не могу использовать DISTINCT с OVER: c
верный. Я забыл об этом. Вместо этого используйте плотный ранг, как показано ниже DENSE_RANK() OVER ( partition by Descrip order by NumeroD) +DENSE_RANK() OVER ( partition by Descrip order by NumeroD desc) -1 as countoforders FROM FORMULAFINAL
DhruvJoshi ТЫ БОГ, БОЛЬШОЕ СПАСИБО
В вашем заголовке написано «SQL Server», так зачем помечать также MySQL и PostgreSQL? Какую СУБД вы используете В самом деле?