Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Комрады, кому не лень, подскажите с запросом пожалуйста. / 8 сообщений из 8, страница 1 из 1
03.01.2022, 19:51
    #40124585
voronk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комрады, кому не лень, подскажите с запросом пожалуйста.
Доброго всем времени суток.

set nocount on
go

drop table #temp
go

create table #temp(
association_id int not null,
vendor_id int not null,
vendor_name varchar(50) not null,
vendor_amount money not null,
seq_no int identity)

ALTER TABLE #temp ADD CONSTRAINT pk_tmp PRIMARY KEY CLUSTERED (association_id, vendor_id)

insert into #temp values( 1, 10, 'John', 20.00)
insert into #temp values( 1, 11, 'Bill', 21.01)
insert into #temp values( 1, 12, 'Oliver', 22.02)
insert into #temp values( 1, 13, 'Elijah', 23.03)

insert into #temp values( 2, 10, 'John', 24.04)
insert into #temp values( 2, 14, 'William', 25.05)
insert into #temp values( 2, 15, 'James', 26.06)

insert into #temp values( 3, 10, 'John', 27.07)
insert into #temp values( 3, 14, 'William', 28.08)
insert into #temp values( 3, 15, 'James', 29.09)
insert into #temp values( 3, 16, 'Lucas', 30.00)
insert into #temp values( 3, 17, 'Henry', 31.01)


select association_id, vendor_id, vendor_name, vendor_amount from #temp order by seq_no
select @@ROWCOUNT

имеем:
"association_id" "vendor_id" "vendor_name" "vendor_amount"
1, 10, 'John', 20.00
1, 11, 'Bill', 21.01
1, 12, 'Oliver', 22.02
1, 13, 'Elijah', 23.03
2, 10, 'John', 24.04
2, 14, 'William', 25.05
2, 15, 'James', 26.06
3, 10, 'John', 27.07
3, 14, 'William', 28.08
3, 15, 'James', 29.09
3, 16, 'Lucas', 30.00
3, 17, 'Henry', 31.01


-----------
12

нужно:

/*
"association_id" "vendor_id" "vendor_name" "vendor_amount" "association_id_1" "vendor_id_1" "vendor_name_1" "vendor_amount_1" "association_id_2" "vendor_id_2" "vendor_name_2" "vendor_amount_2"

1, 10, 'John', 20.00, 1, 11, 'Bill', 21.01, 1, 12, 'Oliver', 22.02
1, 13, 'Elijah', 23.03, null, null, null, null, null, null, null, null
2, 10, 'John', 24.04, 2, 14, 'William', 25.05, 2, 15, 'James', 26.06
3, 10, 'John', 27.07, 3, 14, 'William', 28.08, 3, 15, 'James', 29.09
3, 16, 'Lucas', 30.00, 3, 17, 'Henry', 31.01, null, null, null, null
*/
-----------------
5


т.е. каждая строка (запись, row) возвращает не 4 а 12 колонок, 4 своих и 8 из 2 последуюших строк (записей, rows).
если обе или одна из них (строк) относитса к следующей association_id, то соответсвенно колонки ХХХ_1 и ХХХ_2 заполняютса null, а дата из них переходит на новую строку.

Зараннее благодарен.
Спасибо.
...
Рейтинг: 0 / 0
04.01.2022, 05:56
    #40124614
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комрады, кому не лень, подскажите с запросом пожалуйста.
Очень хорошо для общего понимания осознать, что sql не выдает динамический набор полей на запись.

Каждое поле (association_id_1" "vendor_id_1" "vendor_name_1" "vendor_amount_1" "association_id_2" "vendor_id_2" "vendor_name_2" "vendor_amount_2") должно быть прописано в select и его источник установлен.

Вам нужен JOIN, что бы сделать вашу выборку, пока что просто концепт join.
...
Рейтинг: 0 / 0
04.01.2022, 10:37
    #40124622
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комрады, кому не лень, подскажите с запросом пожалуйста.
вводите служебное поле "row_number() over(partition by association_id ..) /4 as Row_new"
после чего раскладываете case -ом по остатку " % 4" на столбцы и делаете max/sum по желанию
ну или pivot

никакого join не нужно
...
Рейтинг: 0 / 0
04.01.2022, 12:38
    #40124636
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комрады, кому не лень, подскажите с запросом пожалуйста.
voronk,

Вы должны понимать, что основой реляционной базы данных являются неупорядоченные множества различимых элементов. То есть чтобы получить "а дата из них переходит на новую строку", необходимо выполнить определенные действия, приводящие к появлению признака порядка строк, поскольку "новая строка" в неупорядоченных множествах не существует. Например, результат запроса может быть упорядочен путём order by и помещен в упорядоченный массив на клиентском приложении для дальнейшей обработки.
...
Рейтинг: 0 / 0
04.01.2022, 12:43
    #40124638
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комрады, кому не лень, подскажите с запросом пожалуйста.
Владислав Колосов
voronk,

Вы должны понимать, что основой реляционной базы данных являются неупорядоченные множества различимых элементов. То есть чтобы получить "а дата из них переходит на новую строку", необходимо выполнить определенные действия, приводящие к появлению признака порядка строк, поскольку "новая строка" в неупорядоченных множествах не существует. Например, результат запроса может быть упорядочен путём order by и помещен в упорядоченный массив на клиентском приложении для дальнейшей обработки.


Читая фразы типа таких вопросов больше не имею (ц)
"Доброго времени суток"
"ЗараННее благодарен"
...
Рейтинг: 0 / 0
04.01.2022, 19:17
    #40124690
DjadkaDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комрады, кому не лень, подскажите с запросом пожалуйста.
;with
res0 as (
select association_id, vendor_id, vendor_name, vendor_amount
, association_id_1 = lead(association_id, 1) over (partition by association_id order by vendor_id)
, vendor_id_1 = lead(vendor_id, 1) over (partition by association_id order by vendor_id)
, vendor_name_1 = lead(vendor_name, 1) over (partition by association_id order by vendor_id)
, vendor_amount_1 = lead(vendor_amount, 1) over (partition by association_id order by vendor_id)
, association_id_2 = lead(association_id, 2) over (partition by association_id order by vendor_id)
, vendor_id_2 = lead(vendor_id, 2) over (partition by association_id order by vendor_id)
, vendor_name_2 = lead(vendor_name, 2) over (partition by association_id order by vendor_id)
, vendor_amount_2 = lead(vendor_amount, 2) over (partition by association_id order by vendor_id)
, rn = 2 + ROW_NUMBER() over (partition by association_id order by vendor_id)
from #temp
)
select
association_id, vendor_id, vendor_name, vendor_amount
association_id_1, vendor_id_1, vendor_name_1, vendor_amount_1
association_id_2, vendor_id_2, vendor_name_2, vendor_amount_2
from res0 where rn%3=0
...
Рейтинг: 0 / 0
04.01.2022, 19:47
    #40124695
voronk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комрады, кому не лень, подскажите с запросом пожалуйста.
Большое спасибо всем кто поучаствовал, в частности DjadkaDen, именно то, что нужно, премного благодарен.
...
Рейтинг: 0 / 0
04.01.2022, 19:53
    #40124696
voronk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Комрады, кому не лень, подскажите с запросом пожалуйста.
Ролг Хупин

Читая фразы типа таких вопросов больше не имею (ц)
"Доброго времени суток"
"ЗараННее благодарен"


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


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