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

У меня есть таблица с несколькими полями:

ID Key Sum
1 1 1000
1 2 500
1 3 250
2 4 500
2 5 800

мне нужно получить запрос просуммировав поля по ID, т.е.:


ID Key Sum SumID
1 1 1000 1750
1 2 500 1750
1 3 250 1750
2 4 500 1300
2 5 800 1300


Как это можно выразить через select с минимальной нагрузкой на сервер, строк может быть много, 50000 и более?
16 июн 15, 11:24    [17775315]     Ответить | Цитировать Сообщить модератору
 Re: Запрос не укладывается в моей голове.  [new]
Добрый Э - Эх
Guest
...sum(sum) over(partition by id) as SumId ...
и 50000 строк - эт оочень мало в рамках современных ИС и СУБД
16 июн 15, 11:30    [17775371]     Ответить | Цитировать Сообщить модератору
 Re: Запрос не укладывается в моей голове.  [new]
Трость
Guest
Добрый Э - Эх,

Никогда не использовал over

А множите привести пример с использованием over(partition by id), а если получится касаемо моего маленького примера))
16 июн 15, 11:35    [17775413]     Ответить | Цитировать Сообщить модератору
 Re: Запрос не укладывается в моей голове.  [new]
londinium
Member

Откуда: Киев
Сообщений: 1193
WITH CTE(ID,KEYY,SUMM) AS
(
  SELECT 1, 1, 1000
    UNION ALL
  SELECT 1, 2, 500
    UNION ALL
  SELECT 1, 3, 250
    UNION ALL
  SELECT 2, 4, 500
    UNION ALL
  SELECT 2, 5 ,800
)

SELECT C.ID,C.KEYY,C.SUMM,
 SUM(SUMM)OVER(PARTITION BY C.ID)A
 FROM CTE C
16 июн 15, 11:39    [17775451]     Ответить | Цитировать Сообщить модератору
 Re: Запрос не укладывается в моей голове.  [new]
Добрый Э - Эх
Guest
Трость,

я привел дословный текст того, что тебе нужно вставить в Select-лист своего запроса.
единственное, что если поле и в самом деле называется sum, то лучше указывать его в квадратных скобках.
16 июн 15, 11:40    [17775468]     Ответить | Цитировать Сообщить модератору
 Re: Запрос не укладывается в моей голове.  [new]
Трость
Guest
londinium
WITH CTE(ID,KEYY,SUMM) AS
(
  SELECT 1, 1, 1000
    UNION ALL
  SELECT 1, 2, 500
    UNION ALL
  SELECT 1, 3, 250
    UNION ALL
  SELECT 2, 4, 500
    UNION ALL
  SELECT 2, 5 ,800
)

SELECT C.ID,C.KEYY,C.SUMM,
 SUM(SUMM)OVER(PARTITION BY C.ID)A
 FROM CTE C


Супер, а если нужно получить ещё колонку, сумму всех строк, то как?
16 июн 15, 11:54    [17775597]     Ответить | Цитировать Сообщить модератору
 Re: Запрос не укладывается в моей голове.  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
Трость
londinium
WITH CTE(ID,KEYY,SUMM) AS
(
  SELECT 1, 1, 1000
    UNION ALL
  SELECT 1, 2, 500
    UNION ALL
  SELECT 1, 3, 250
    UNION ALL
  SELECT 2, 4, 500
    UNION ALL
  SELECT 2, 5 ,800
)

SELECT C.ID,C.KEYY,C.SUMM,
 SUM(SUMM)OVER(PARTITION BY C.ID)A
 FROM CTE C



Супер, а если нужно получить ещё колонку, сумму всех строк, то как?
SUM(SUMM)OVER()
16 июн 15, 11:57    [17775612]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить