分组后从另一个表创建新表

时间:2011-11-28 20:52:29

标签: sql sql-server-2008 group-by insert

如何从“分组”其他表中向表中插入值? 这意味着我有2个不同结构的表。

表ORDRE与现有DATA

表ORDRE:

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

我想要将值FROM FROM ORDRE INTO 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 个答案:

答案 0 :(得分:3)

这是我对你所需要的最好的猜测,仅使用可用的信息。

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

Working Example.

答案 1 :(得分:0)

对于您提供的具体数据,这有用:

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/