powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сложная (?) сортировка
5 сообщений из 5, страница 1 из 1
Сложная (?) сортировка
    #32056139
boris29k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имею таблицу

DATE | NAME_OF_VALUE | VALUE
27.03 | TEST_1 | 60
27.03 | TEST_2 | 30
27.03 | TEST_3 | 40
25.04 | TEST_1 | 150
25.04 | TEST_3 | 270
28.04 | TEST_1 | 15
хочу получть recordset где для каждой даты стоят отсортированные ASC по VALUE NAME_OF_VALUEs с порядковым номером сортировки,типа

DATE | NAME_OF_VALUE | RANG
27.03 | TEST_2 | 1
27.03 | TEST_3 | 2
27.03 | TEST_1 | 3
25.04 | TEST_1 | 1
25.04 | TEST_3 | 2
28.04 | TEST_1 | 1
без курсоров и временных таблиц.
Отсутствует понимание -как:-)
...
Рейтинг: 0 / 0
Сложная (?) сортировка
    #32056153
Stork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
create table #tmp
(
	[date] datetime not null,
	name_of_value nvarchar( 100 ) not null,
	value int not null
)

 /*
Считаем, что комбинация [date] и [name_of_value] уникальна,
иначе полученная выборка не будет читаться (не будет понятно,
какой именно из "тестов" стоит в этой дате на этом месте)
*/ 
alter table #tmp add constraint unq_tmp unique ([date],name_of_value)

insert into #tmp values ('20000327','TEST_1', 60 )
insert into #tmp values ('20000327','TEST_2', 30 )
insert into #tmp values ('20000327','TEST_3', 40 )
insert into #tmp values ('20000425','TEST_1', 150 )
insert into #tmp values ('20000425','TEST_3', 270 )
insert into #tmp values ('20000428','TEST_1', 15 )

Select
	[date],
	name_of_value,
	rang
From
	(
	Select
		convert(varchar( 5 ),t.[date], 104 ) [date],
		t.name_of_value name_of_value,
		Count(*) rang,
		t.[date] dateorder
	From
		#tmp t
		inner join #tmp tt
			on t.[date]=tt.[date] 
			and t.value>=tt.value
	Group By
		t.[date],
		t.name_of_value
	) result
Order By
	result.dateorder,
	result.rang

drop table #tmp


С уважением,
Александр Степанов
...
Рейтинг: 0 / 0
Сложная (?) сортировка
    #32056160
boris29k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Элегантно и работает,
спасибо большое!
...
Рейтинг: 0 / 0
Сложная (?) сортировка
    #32056162
Alexander_Yudakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
If Object_ID('tempdb..#MyTable') is not null
 Drop table #MyTable
go

Create table #MyTable
(
 Date datetime not null,
 Name_of_value varchar( 100 ) not null,
 Value int
)
go

Insert into #MyTable values('2002-03-27', 'TEST_1',  60 )
Insert into #MyTable values('2002-03-27', 'TEST_2',  30 )
Insert into #MyTable values('2002-03-27', 'TEST_3',  40 )
Insert into #MyTable values('2002-04-25', 'TEST_1',  150 )
Insert into #MyTable values('2002-04-25', 'TEST_3',  270 )
Insert into #MyTable values('2002-04-28', 'TEST_1',  15 )
go

Select T1.Date, T1.Name_of_value, Count(*) Range
from #MyTable T1
join #MyTable T2
on ((T1.Date = T2.Date) and (T1.Value >= T2.Value))
group by T1.Date, T1.Name_of_value
order by T1.Date, Range
...
Рейтинг: 0 / 0
Сложная (?) сортировка
    #32056163
Alexander_Yudakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь. Забыл F5 нажать. Ответ оказывается уже есть.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сложная (?) сортировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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