Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL-запрос с оконными функциями / 5 сообщений из 5, страница 1 из 1
26.10.2020, 21:45
    #40012027
Sviman144
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос с оконными функциями
Добрый день,

Я — новичок в T-SQL, прошу совета.

Есть таблица примерно следующего содержания:
IdNameTypeSumm1AX101AY201AZ302BY702BX103CY203CX403CZ40
Подскажите, пожалуйста, можно ли (если "да", то каким образом) в одном запросе получить из таблицы:
все строки + дополнительный столбец, в котором строки будут ранжированы по ОБЩЕЙ сумме каждой строки из "Name"?
Иначе говоря, получить на выходе следующую таблицу (т.к. общая сумма по CCC - 100,00; по BBB - 80,00; ААА - 60,00):

IdNameTypeSummrnk1AX1011AY2011AZ3012BY7022BX1023CY2013CX4013CZ401

Т.е. получается, что ранжирование должно идти не просто по столбцу "Summ", а по Sum("Summ").
Заранее благодарю за оперативный и содержательный ответ.

P.S. Версия - SQL server 2008r2
...
Рейтинг: 0 / 0
26.10.2020, 22:48
    #40012039
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос с оконными функциями
Sviman144,

что вы понимаете под словами " в одном запросе получить "?
Обычно критерием "одного запроса" является "один рекордсет"/"действие над ним", что вполне может содержать кучу подзапросов, соединений и т.д.

PS. И да... У вас точно табличка с rnk правильная? почему-то два ранга с "1"
...
Рейтинг: 0 / 0
26.10.2020, 23:01
    #40012042
Sviman144
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос с оконными функциями
godsql,

1. Да, виноват, в примере ошибся. Правильно:
IdNameTypeSummrnk1AX1031AY2031AZ3032BY7022BX1023CY2013CX4013CZ401

2. Возможно, неправильно выразился.
К таблице №1 (верхняя в первом сообщении), хочу добавить столбец так, чтобы результатом была таблица №2 (нижняя из первого сообщения).
...
Рейтинг: 0 / 0
26.10.2020, 23:03
    #40012043
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос с оконными функциями
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create table #t (
id int,
Name varchar(10),
Type varchar(10),
Summ int
)
insert into #t (id,Name,	Type,	Summ) values
(1,	'A',	'X',	10),
(1,	'A',	'Y',	20),
(1,	'A',	'Z',	30),
(2,	'B',	'Y',	70),
(2,	'B',	'Z',	10),
(3,	'C',	'Y',	20),
(3,	'C',	'X',	40),
(3,	'C',	'Z',	40)

select #t.*, DENSE_RANK () over (order by sum1 desc) as rnk  from #t
join (select id, sum(Summ) as sum1 from #t group by id  ) t2 on #t.id=t2.id
order by #t.id

DROP TABLE #t

...
Рейтинг: 0 / 0
26.10.2020, 23:31
    #40012057
Sviman144
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL-запрос с оконными функциями
godsql,

Спасибо. Не догадался саму к себе таблицу присоединить (думал "вложить" оконную в оконную, но так, оказывается, нельзя). Делал через два запроса: сначала добавлял столбец с общей суммой (промежуточным запросом), затем вторым запросом вычислял ранг. :)

Вопрос решен. Тему можно считать закрытой.
Еще раз, большое спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL-запрос с оконными функциями / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]