Создать новую таблицу из другой таблицы после группировки - PullRequest
0 голосов
/ 29 ноября 2011

Как я могу вставить в таблицу значение из "группировки" другой таблицы? Это означает, что у меня есть 2 таблицы с различной структурой.

Таблица ORDRE с существующими данными

Таблица ORDRE:

ORDRE ID  |  CODE_DEST | 
-------------------------
    1     |     a      |    
    2     |     b      |    
    3     |     c      |    
    4     |     a      |    
    5     |     a      |    
    6     |     b      |    
    7     |     g      |    

Я хочу вставить значение из таблицы ORDRE IN TABLE VOIT:

 ID_VOIT  |  ORDRE ID  |    CODE_DEST | 
 ---------------------------------------
    1     |     1      |         a    |   
    1     |     4      |         a    |    
    1     |     5      |         a    |   
    2     |     2      |         b    |     
    2     |     6      |         b    |    
    3     |     3      |         c    |     
    4     |     7      |         g    |    

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

Это мое лучшее предположение о том, что вам нужно, используя только доступную информацию.

declare @Ordre table
(
  ordre_id int,
  code_dest char(1)
)
declare @Voit table
(
  id_voit int,
  ordre_id int,
  code_dest char(1)
)

insert into @Ordre values
(1,'a'),
(2,'b'),
(3,'c'),
(4,'a'),
(5,'a'),
(6,'b'),
(7,'g')


insert into @Voit
select id_voit, ordre_id, rsOrdre.code_dest
from @Ordre rsOrdre
inner join
(
  select code_dest, ROW_NUMBER() over (order by code_dest) as id_voit
  from @Ordre
  group by code_dest
) rsVoit on rsVoit.code_dest = rsOrdre.code_dest
order by id_voit, ordre_id


select * from @Voit

Рабочий пример.

0 голосов
/ 29 ноября 2011

Для конкретных данных, которые вы приводите в качестве примера, это работает:

insert into VOIT
select 
case code_dest
 when 'a' then 1
 when 'b' then 2
 when 'c' then 3
 when 'g' then 4
 else 0
end, orderId, code_dest from ORDRE order by code_dest, orderId

Но это отстой, потому что требует жесткого кодирования в огромном регистре.

Тест здесь - http://data.stackexchange.com/stackoverflow/q/119442/

Что мне нравится больше, так это перемещение ассоциаций VOIT ID / Code_Dest в новую таблицу, чтобы вы могли вместо этого сделать inner join.

insert into VOIT
select voit_id, orderId, t.code_dest 
from ORDRE t
join Voit_CodeDest t2 on t.code_dest = t2.code_dest
order by code_dest, orderId

Рабочий пример этого здесь - http://data.stackexchange.com/stackoverflow/q/119443/

...