Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Перевернуть строки  [new]
LisSp
Member

Откуда:
Сообщений: 186
Всем привет!

Помогите, пожалуйста, перевернуть данные.

Исходная таблица:
Number Description Language
1 Яблоко RUS
1 Apple ENG
2 Апельсин RUS
2 Orange ENG



То, что нужно получить:
Number DescriptionRUS DescriptionENG
1 Яблоко Apple
2 Апельсин Orange


Спасибо!
28 апр 18, 00:17    [21375787]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть строки  [new]
LameUser
Member

Откуда:
Сообщений: 2028
LisSp,

declare @t table
(
number int,
name varchar (10),
Language varchar(3)
)

insert into @t
values (1, 'Яблоко', 'RUS'),
	   (1, 'Apple', 'ENG'),
	   (2, 'Апельсин', 'RUS'),
	   (2, 'Orange', 'ENG')


select number, max(name), min(name)
from @t
group by number



Первую часть могли бы и сами бы сделать (заполнение таблицы данными).
28 апр 18, 07:13    [21375907]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть строки  [new]
982183
Member

Откуда: VL
Сообщений: 3352
Гениально.
Работать будет, но препод явно не оценит.
28 апр 18, 07:17    [21375913]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть строки  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
982183,

declare @t table
(
number int,
name varchar (10),
Language varchar(3)
)

insert into @t
values (1, 'Яблоко', 'RUS'),
(1, 'Apple', 'ENG'),
(2, 'Апельсин', 'RUS'),
(2, 'Orange', 'ENG')

Select a.number,a.name as DescriptionRUS, b.name as DescriptionENG From @t a
left join @t b on a.number = b.number and b.Language = 'ENG'
Where a.Language = 'RUS'
28 апр 18, 07:27    [21375919]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть строки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Kopelly
Select a.number,a.name as DescriptionRUS, b.name as DescriptionENG From @t a
left join @t b on a.number = b.number and b.Language = 'ENG'
Where a.Language = 'RUS'
left join не надо, нужно использовать или join, или full join
28 апр 18, 07:48    [21375934]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть строки  [new]
LameUser
Member

Откуда:
Сообщений: 2028
982183
Гениально.
Работать будет, но препод явно не оценит.


Еще один вариантик без джойнов:

declare @t table
(
number int,
name varchar (10),
Language varchar(3)
)

insert into @t
values (1, 'Яблоко', 'RUS'),
(1, 'Apple', 'ENG'),
(2, 'Апельсин', 'RUS'),
(2, 'Orange', 'ENG')


select * from
(
	select number, 
	name r,
	lag (name) over (partition by number order by name) e
from @t ) t
where e is not null


жаль аналитические функцие в мскл нельзя использовать в блоке where, из-за чего пришлось делать внешний запрос.
28 апр 18, 09:22    [21376151]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть строки  [new]
cherox
Member

Откуда: Новосибирск
Сообщений: 97
select Number, DescriptionRUS = RUS, DescriptionENG = ENG from (select * from @t) a pivot (max([Description]) for [Language] in (RUS, ENG)) b
28 апр 18, 09:48    [21376240]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть строки  [new]
Alibek B.
Member

Откуда:
Сообщений: 3598
Kopelly
Select a.number,a.name as DescriptionRUS, b.name as DescriptionENG From @t a
left join @t b on a.number = b.number and b.Language = 'ENG'
Where a.Language = 'RUS'

Если возможен left join, то делать следует не так.

select ...
from (select distinct Number from @t)
left join ... and Language='RUS'
left join ... and Language='ENG'
28 апр 18, 09:49    [21376243]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть строки  [new]
Guest993
Member

Откуда:
Сообщений: 5
select number, [RUS], [ENG]
  from @t
 pivot (max([name]) for [language] in ([RUS], [ENG])) pvt
28 апр 18, 18:55    [21377880]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить