我有一个表A如下:
工令 制程 时间 ……
123 S 1
456 P 2
123 P 1.5
123 S 2.0
……
===========================
另外一个表B为:
工令 S时间 P时间 W时间 ……
123
456
===========================
想请问各位大侠,怎样写一存储过程,更新B表的数据,其中B表的S时间为,A表中想同工令的制程为S的时间之和,P时间为制程为P的时间之和??急啊,大哥大姐们帮忙啊!
==========================
正确执行后结果应该是
工令 S时间 P时间
123 3.0 1.5
456 0 2.0=======================
邹老师昨天给的答案:
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.工令
')
============我执行后,提示影响行数为2行,但是B表的值没有更新,怎么回事啊??
工令 制程 时间 ……
123 S 1
456 P 2
123 P 1.5
123 S 2.0
……
===========================
另外一个表B为:
工令 S时间 P时间 W时间 ……
123
456
===========================
想请问各位大侠,怎样写一存储过程,更新B表的数据,其中B表的S时间为,A表中想同工令的制程为S的时间之和,P时间为制程为P的时间之和??急啊,大哥大姐们帮忙啊!
==========================
正确执行后结果应该是
工令 S时间 P时间
123 3.0 1.5
456 0 2.0=======================
邹老师昨天给的答案:
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.工令
')
============我执行后,提示影响行数为2行,但是B表的值没有更新,怎么回事啊??
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货