powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, получить нужный набор данных...
4 сообщений из 4, страница 1 из 1
Помогите, пожалуйста, получить нужный набор данных...
    #32070421
Oers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица примерно со след. набором данных
dealno char(8), --номер сделки
ccy char(3), -- валюта сделки
pr int, --признак сплита валюты по данной сделке (т.е. сумма по валюте с признаком 1 складывается из сумм по этой же валюте с признаком 2 в рамках одной сделки)
prccy char(3) –признаки валюты в сделке (первая валюта – ccy, вторая валюта - ctr)
oper char(4) --некий оператор
seq char(3) - некая последовательность, неповторяющая в рамках одной сделке по каждой из валют

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
dealno   ccy       pr	prccy	oper	seq	    

 10 	rur	 1 	ccy	NULL	 0  	
 10 	rur	 2 	ccy	B	 001 
 10 	rur	 2 	ccy	C	 003 
 10 	usd	 1 	ctr	NULL	 0 
 10 	usd	 2 	ctr	B	 002 
 10 	usd	 2 	ctr	B	 004 
 20 	eur	 1 	ccy	NULL	 0 
 20 	eur	 2 	ccy	A	 001 
 20 	eur	 2 	ccy	C	 002 
 20 	usd	 1 	ctr	NULL	 0 
 20 	usd	 2 	ctr	A	 004 
 20 	usd	 2 	ctr	D	 003 
 30 	rur	 1 	ccy	B	 0 
 30 	eur	 1 	ctr	C	 0 
 40 	usd	 1 	ccy	D	 0 
 40 	eur	 1 	ctr	D	 0 



Есть фильтр oper in (‘A’, ‘B’)

Нужно выбрать записи, которые удовлятворяют этому фильтру.
Но нужно учитывать, что должны выбраться все записи с одинаковым dealno, если хотя бы один из oper по этому dealno удовлятворяет фильтру.
При данном наборе записей в таблице должны выбраться все строки , кроме dealno=’40’ и обязательно в том же порядке, как и в приведенном примере.
В реальной таблице записи храняться в разнобой и их, я думаю, нужно группировать по dealno, ccy, prccy, pr, oper, seq) и использовать having.
У меня возникла загвоздка в применении фильтра.
Как-то не получается облечь все это в виде T-SQL.

Заранее спасибо всем, кто отклинется.
...
Рейтинг: 0 / 0
Помогите, пожалуйста, получить нужный набор данных...
    #32070427
Oers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При данном наборе записей в таблице должны выбраться все строки , кроме dealno=’40’ и обязательно в том же порядке, как и в приведенном примере.

Не важен только порядок oper и seq в рамках одного и того же dealno, ccy, prccy, pr
...
Рейтинг: 0 / 0
Помогите, пожалуйста, получить нужный набор данных...
    #32070433
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что-ли ?

Код: 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.
set nocount on
create table #t(dealno char( 8 ),  --номер сделки 
 
ccy char( 3 ),  -- валюта сделки 
 
pr int,  --признак сплита валюты по данной сделке (т.е. сумма по валюте с признаком 1 складывается из сумм по этой же валюте с признаком 2 в рамках одной сделки) 
 
prccy char( 3 ),  --признаки валюты в сделке (первая валюта – ccy, вторая валюта - ctr) 
 
oper char( 4 ),  --некий оператор 
 
seq char( 3 )  -- некая последовательность, неповторяющая в рамках одной сделке по каждой из валют )
 
)


insert #t values('10', 'rur',  1 , 'ccy', NULL, '0')
insert #t values('10', 'rur',  2 , 'ccy', 'B', '001')
insert #t values('10', 'rur',  2 , 'ccy', 'C', '003')
insert #t values('10', 'usd',  1 , 'ctr', NULL, '0')
insert #t values('10', 'usd',  2 , 'ctr', 'B', '002')
insert #t values('10', 'usd',  2 , 'ctr', 'B', '004')
insert #t values('20', 'eur',  1 , 'ccy', NULL, '0')
insert #t values('20', 'eur',  2 , 'ccy', 'A', '001')
insert #t values('20', 'eur',  2 , 'ccy', 'C', '002')
insert #t values('20', 'usd',  1 , 'ctr', NULL, '0')
insert #t values('20', 'usd',  2 , 'ctr', 'A', '004')
insert #t values('20', 'usd',  2 , 'ctr', 'D', '003')
insert #t values('30', 'rur',  1 , 'ccy', 'B', '0')
insert #t values('30', 'eur',  1 , 'ctr', 'C', '0')
insert #t values('40', 'usd',  1 , 'ccy', 'D', '0')
insert #t values('40', 'eur',  1 , 'ctr', 'D', '0')

select a.* from #t a
where a.dealno in (select distinct dealno from #t where oper in ('A', 'B'))
order by a.dealno, a.ccy, a.pr, a.prccy, a.oper, a.seq

drop table #t
...
Рейтинг: 0 / 0
Помогите, пожалуйста, получить нужный набор данных...
    #32070439
Oers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо Glory!!!
Вы мне очень помогли...
Судя по Вашему запросу, на самом деле все оказалось достаточно прозрачней, чем представлялось мне в начале.

Единственно только несколько нужно поменять порядок в order by, т.к. сначала идет первая валюта сделки, а потом вторая (это строгая закономерность) (это уже мой недочет).

Код: plaintext
1.
2.
3.
select a.* from MNAP a
where a.dealno in (select distinct dealno from MNAP where oper in ('A', 'B'))
order by a.dealno, a.prccy, a.ccy, a.pr, a.oper, a.seq


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


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