我有一个表A如下:
工令  制程   时间  ……
123   S       1
456   P       2
123   W       3
123   P       1.5
123   S       2.0
……
===========================
另外一个表B为:
工令  S时间  P时间  W时间  ……
123
456
……
===========================   
想请问各位大侠,怎样写一存储过程,更新B表的数据,其中B表的S时间为,A表中想同工令的制程为S的时间之和,P时间为制程为P的时间之和??急啊,大哥大姐们帮忙啊!
(按要求上面的表更新后,B表应为):
工令  S时间  P时间  W时间
123   3.0    1.5    3
456    0     2      0

解决方案 »

  1.   

    我现在是在delphi 中用到这些,是循环B表中的工令字段,然后一条一条写的,速度非常慢。
    楼上的行列转换怎么转换啊,能不能说的清楚点,谢谢!
    另外我的A表中的记录应该在一万条左右,要行列转换会不会很慢啊???
      

  2.   

    DECLARE @s1 varchar(8000), @s2 varchar(8000)
    SELECT 
    @s1 = '',
    @s2 = ''
    SELECT
    @s1 = @s1 + ',' + fd + '=B.' + fd,
    @s2 = @s2 + ',' + fd + '=SUM(CASE 制程 WHEN ' + value + ' THEN 时间 END)'
    FROM(
    SELECT 
    fd = QUOTENAME(制程 + '时间'),
    value = QUOTENAME(制程, '''')
    FROM(
    SELECT DISTINCT 制程 FROM 表A
    )AA
    )A
    SELECT 
    @s1 = STUFF(@s1, 1, 1, '')
    EXEC('
    UPDATE B SET ' + @s1 + '
    FROM 表B B,(
    SELECT 工令' + @s2 + '
    FROM 表A
    GROUP BY 工令
    )A
    WHERE A.工令 = B.工令
    ')