①业务逻辑:将查询记录生成临时表,然后建立临时表的关联字段和目标表的关联映射,将临时表的列值赋予目标表。
②代码如下:
IF OBJECT_ID('tempdb..#pvt') IS NOT NULL
BEGIN
DROP TABLE #pvt
END
SELECT *
INTO #pvt
FROM ( SELECT *
FROM dbo.dep_ori_temp
) a PIVOT( MAX(a.ori_value) FOR a.ori_name IN ( [指标1], [指标2],
[指标3], [指标4] ) )
AS pvt
SELECT *
FROM #pvt
UPDATE dbo.dep_ori
SET ori_value = ABS((b.[指标1] + b.[指标2] + b.[指标3] )
/ b.[指标4])
FROM dbo.dep_ori a
INNER JOIN #pvt b ON a.sp_year = b.sp_year
AND a.sp_month = b.sp_month
AND a.dep_id = b.dep_id
WHERE a.ori_name = '考核项目A'
③结果:代码运行没有错误提示,临时表行转列成功。
④问题:将临时表的运算值((b.[指标1] + b.[指标2] + b.[指标3] ) / b.[指标4])赋予给目标表时,目标表没有更新任何数据。 可以肯定的是,INNER JOIN的条件字段我已经检查多次,应该没有差错。
⑤请教:为什么无法用INNER JOIN关联临时表中的记录?有兴趣的兄弟可以先检验语法、逻辑问题,若需要测试数据,我稍候提供。
------解决方案--------------------
目测了下,语法没问题。建议你把临时表中的数据检查下。
select *
FROM dbo.dep_ori a
INNER JOIN #pvt b ON a.sp_year = b.sp_year
AND a.sp_month = b.sp_month
AND a.dep_id = b.dep_id
看看结果是什么