标题:请教关于SQL交叉 插入数据
只看楼主
supduo
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-11-1
结帖率:0
已结贴  问题点数:20 回复次数:6 
请教关于SQL交叉 插入数据
比如现在有2张表T1和T2
 T1表为                              T2表为空表 表头是:
案号   工作模块    时间          案号  A    B   C   D   E   F   G   H   I   J      
001         A        6                     
002         B        7
002         C        1
003         J        3
003         I        4
执行结果为
案号  A    B   C   D   E   F   G   H   I   J
001    6
002          7    1
003                                    4   3
大致就是这个样子
结果要保存到表T2中,表中空的单元值为null
搜索更多相关主题的帖子: SQL 数据 交叉 
2010-11-01 17:36
tangyunzhong
Rank: 5Rank: 5
来 自:广西
等 级:职业侠客
威 望:4
帖 子:97
专家分:364
注 册:2010-7-28
得分:3 
回复 楼主 supduo
你去看一下行列旋转吧,行列旋转就能实现你的功能
2010-11-01 21:27
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:3 
试试:select 案号,sum(when 工作模块 case 'A' then 时间 else 0) as A,
                  sum(when 工作模块 case 'B' then 时间 else 0) as B,
                  ...
       from T1
       group by 案号

★★★★★为人民服务★★★★★
2010-11-02 08:06
zhaoyang1008
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:110
注 册:2010-9-15
得分:3 
程序代码:
declare @a int
        ....
        @j int
        @count int
        @ n int
        @anhao varchar(20)--对应于字段案号
      
      set @n=1
select @count=count(*) from T1
select 案号,工作模块,时间,identity(int,1,1) as ID
into a
from T1 order by 案号--创建一个新表,添加一个字段ID用来逐条取出记录,并用案号排序,使得相同案号的记录挨在一起
while(@n<=@count)
begin

select @anhao=案号,case 工作模块
                    when 'A' then  @a=时间
                    when 'B' then  @b=时间
                    when 'C' then  @c=时间
                    when 'D' then  @d=时间
                    when 'E' then  @e=时间
                    when 'F' then  @f=时间
                    when 'G' then  @g=时间
                    when 'H' then  @h=时间
                    when 'I' then  @i=时间
                    when 'J' then  @j=时间
                     
from a where a.ID=@n
                               
  while(true)--这个循环用来将T1表中相同案号的不同记录时间添加到同一条插入记录中
    begin
    @n=@n+1
     if(select 案号 from a where ID=@n)=@anhao
       begin
        select case 工作模块
                    when 'A' then  @a=时间
                    when 'B' then  @b=时间
                    when 'C' then  @c=时间
                    when 'D' then  @d=时间
                    when 'E' then  @e=时间
                    when 'F' then  @f=时间
                    when 'G' then  @g=时间
                    when 'H' then  @h=时间
                    when 'I' then  @i=时间
                    when 'J' then  @j=时间
                     
                     from a where a.ID=@n
       end
    else
       
        break
    end
insert into T2
values(@anhao,@a,@b,@c,@d,@e,@f,@g,@h,@i,@j)

end
drop table a
2010-11-02 11:26
aei135
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:232
专家分:1176
注 册:2009-4-6
得分:3 
INSERT INTO T2
SELECT 案号,
    SUM(CASE WHEN 工作模块='A' THEN 时间 ELSE 0 END) A,
    SUM(CASE WHEN 工作模块='B' THEN 时间 ELSE 0 END) B,
    SUM(CASE WHEN 工作模块='C' THEN 时间 ELSE 0 END) C,
    SUM(CASE WHEN 工作模块='D' THEN 时间 ELSE 0 END) D,
    SUM(CASE WHEN 工作模块='E' THEN 时间 ELSE 0 END) E,
    SUM(CASE WHEN 工作模块='F' THEN 时间 ELSE 0 END) F,
    SUM(CASE WHEN 工作模块='G' THEN 时间 ELSE 0 END) G,
    SUM(CASE WHEN 工作模块='H' THEN 时间 ELSE 0 END) H,
    SUM(CASE WHEN 工作模块='I' THEN 时间 ELSE 0 END) I,
    SUM(CASE WHEN 工作模块='J' THEN 时间 ELSE 0 END) J
FROM T1
GROUP BY 案号
2010-11-02 11:54
pumbaax10
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2010-8-6
得分:3 
用curosr逐笔insert

代码如下:栏位名称自己再改下,类型如果有不对的话自己再cast转下。
Declare @aa as varchar(10)
Declare @bb as varchar(10)
Declare @cc as varchar(10)
Declare @sql_insert as nvarchar(1024)

Declare T1_cursor Cursor for
    select aa,bb,cc from T1 order by aa

Open T1_cursor
fetch next from T1_cursor into @aa,@bb,@cc

While (@@fetch_status<>-1)
Begin
    select aa from T2 where aa = @aa
    if(@@rowcount=0)
        insert into T2 (aa) values (@aa)
    set @sql_insert = 'update T2 set ' + @bb +' = '+@cc+' where aa = '+@aa


    fetch next from T1_cursor into @aa,@bb,@cc

End
close T1_cursor
deallocate T1_cursor
2010-11-02 13:37
欲与天斗
Rank: 4
等 级:业余侠客
帖 子:88
专家分:270
注 册:2010-10-6
得分:3 
没想到刚进来就看到这么多人回复
2010-11-05 12:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-324649-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.521825 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved