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

table1
(
idTable1 int,
xxxx varchar(255)
)

table2
(
idTable2 int,
idTable1 int,
xxx varchar(255)
)

нужно вывести все что есть в table1 + то что из table2 относится к table1 но в строку
8 янв 14, 13:31    [15385994]     Ответить | Цитировать Сообщить модератору
 Re: транспонирование  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
есть такая штука поиск ,задача решалась 50 раз
8 янв 14, 15:43    [15386449]     Ответить | Цитировать Сообщить модератору
 Re: транспонирование  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
fffffffffffffff,

возможно это: https://www.sql.ru/faq/faq_topic.aspx?fid=130
но вообще, прочитайте Рекомендации по оформлению сообщений в форуме и оформите вопрос по-человечески, потому что сейчас трудно понять, чего вы хотите.
8 янв 14, 15:45    [15386455]     Ответить | Цитировать Сообщить модератору
 Re: транспонирование  [new]
Ennor Tiegael
Member

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

В строку или в строчку?
9 янв 14, 06:18    [15388323]     Ответить | Цитировать Сообщить модератору
 Re: транспонирование  [new]
fffffffffffffff
Guest
Ennor Tiegael
fffffffffffffff,

В строку или в строчку?


Новая таблица должна
содержать следующие поля:

idTable1 xxxx xxx1 ... xxxN

где xxx1 ... xxxN - поле xxx из table2
9 янв 14, 11:46    [15389096]     Ответить | Цитировать Сообщить модератору
 Re: транспонирование  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
PIVOT
9 янв 14, 11:46    [15389100]     Ответить | Цитировать Сообщить модератору
 Re: транспонирование  [new]
fffffffffffffff
Guest
Ennor Tiegael
PIVOT


у меня тоже такие мысли были но пивот же по агрегатной функции
9 янв 14, 11:50    [15389130]     Ответить | Цитировать Сообщить модератору
 Re: транспонирование  [new]
Ennor Tiegael
Member

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

Пофиг. Внесите под агрегат уникальное поле - max(Id) - и все заработает.
9 янв 14, 11:53    [15389161]     Ответить | Цитировать Сообщить модератору
 Re: транспонирование  [new]
fffffffffffffff
Guest
Ennor Tiegael
fffffffffffffff,

Пофиг. Внесите под агрегат уникальное поле - max(Id) - и все заработает.

нет. пивот не подходит. в нем в in нужно указывать конкретный набор значений а у меня это может быть произвольный набор
9 янв 14, 14:09    [15390145]     Ответить | Цитировать Сообщить модератору
 Re: транспонирование  [new]
user89
Member

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

конечно, тестовые данные не помешали бы...

Так сойдет?
set nocount on

if object_id('tempdb..#table1') is not null drop table #table1
if object_id('tempdb..#table2') is not null drop table #table2

select 10 [idx1],'За столом' [value1] into #table1 union all select 20, 'Мясом конюх'
select 10 [idx1], 1 [idx2], 'сидели' [value2] into #table2 union all select 10,2,'мужики' union all select 10,3,'и ели.'
union all select 20,1,'угощал' union all select 20,2,'своих гостей'

declare @col varchar(max), @s varchar(max)
select @col = stuff((select ',' + quotename(idx2) from #table2 group by idx2 order by idx2 for xml path('')), 1,1,'')

select @s =
';with tmp as (
  select t1.idx1, t1.value1, t2.idx2, t2.value2
  from #table1 t1
  inner join #table2 t2 on t1.idx1 = t2.idx1
)
select * from tmp
pivot(max(value2) for idx2 in(' + @col + '))pvt'
print @s
exec(@s)

if object_id('tempdb..#table1') is not null drop table #table1
if object_id('tempdb..#table2') is not null drop table #table2
9 янв 14, 15:49    [15391155]     Ответить | Цитировать Сообщить модератору
 Re: транспонирование  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
fffffffffffffff
нет. пивот не подходит. в нем в in нужно указывать конкретный набор значений а у меня это может быть произвольный набор
Тогда пивотить на клиенте.

На самом деле, пивотить всегда лучше на клиенте, просто не все это понимают.
10 янв 14, 05:11    [15394186]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить