Как сгруппировать столбцы, когда значение повторяется в SQL

Я подключил свою базу данных Access к файлу Excel и выполнил несколько простых запросов SQL, и я хочу сделать что-то, чего не знаю, возможно ли это.

Я хочу сгруппировать значения в столбцах, когда значения повторяются.

Например, вот простой результат запроса:

ID | Name | Color 1 John Red 1 John Yellow 2 Bill Red 2 Bill Blue 2 Bill Black

Я хотел бы, чтобы результаты были представлены таким образом:

ID | Name | Color 1 John Red Yellow 2 Bill Red Blue Black

Это возможно?

Цените ваши ответы!

Благодарю.

3 ответа

Это не может быть результатом запроса SQL, запрос будет отображать значения в полях "ID" и "Name", связанных с полем "Color", если они существуют. более того, в результате запроса ничего не будет связывать Блю с Биллом, а не с Джоном.

Если ваша цель - отобразить в Excel, вы можете запустить код через Cols ID и NAME снизу вверх и удалить ячейки, значения которых равны ячейке выше.

Вот, пожалуйста. Нет ничего невозможного.

create table tbl_table
(Id int,
Name varchar(32),
Color varchar(16)
)
go

insert into tbl_table
values(1,'John','Red');
insert into tbl_table
values(1,'John','Yellow');
insert into tbl_table
values(2,'Bill','Red');
insert into tbl_table
values(2,'Bill','Blue');
insert into tbl_table
values(2,'Bill','Black');
go

select a.id,case when a.Id=b.Id and a.rowid<>b.rowid then NULL else a.Name end,a.Color
from
(
select ROW_NUMBER () OVER (Order by Id asc ) rowid,* from tbl_table
) a
left join
(
select ROW_NUMBER () OVER (Order by Id asc ) rowid,* from tbl_table
) b
on a.rowid-1=b.rowid

Спасибо

create table tbl_table
(Id int,
Name varchar(32),
Color varchar(16)
)
go

insert into tbl_table
values(1,'John','Red');
insert into tbl_table
values(1,'John','Yellow');
insert into tbl_table
values(2,'Bill','Red');
insert into tbl_table
values(2,'Bill','Blue');
insert into tbl_table
values(2,'Bill','Black');
go

select a.id,case when a.Id=b.Id and a.rowid<>b.rowid then NULL else a.Name end,a.Color
from
(
select DCount("[ID]","[tbl_table]","[ID]<=" & [ID]) rowid,* from tbl_table
) a
left join
(
select DCount("[ID]","[tbl_table]","[ID]<=" & [ID]) rowid,* from tbl_table
) b
on a.rowid-1=b.rowid

Попробуй это

Другие вопросы по тегам