当前位置: 代码迷 >> Sql Server >> 为何无法用INNER JOIN关联临时表中的记录
  详细解决方案

为何无法用INNER JOIN关联临时表中的记录

热度:86   发布时间:2016-04-24 10:37:46.0
为什么无法用INNER JOIN关联临时表中的记录?
①业务逻辑:将查询记录生成临时表,然后建立临时表的关联字段和目标表的关联映射,将临时表的列值赋予目标表。

②代码如下:

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
看看结果是什么
  相关解决方案