关于更新SQL中用左关联有关问题
关于更新SQL中用左关联问题
各位大侠,帮看一下啥问题
表结构

想实现的目标是更新YEAR_BASIS_BAK(本机测试,字段名大家不用纠结,实际是要更新YEAR_BASIS的,不过由于目前只有201404数据,YEAR_BASIS字段手工造了0)字段值为同比值,计算方法是
同比=(本期值-去年同期值)/去年同期值
由于目前的表里只有201404(2014年4月份)的数据,为了更新到同比值,跟自己关联历史值是用了左关联,不过貌似出不来结果,各位帮帮忙看看什么问题
UPDATE DM_TZJH_WCL T
SET T.YEAR_BASIS_BAK =
(
SELECT CASE
WHEN V.BEFORE_YEAR_VALUE = 0 THEN
0
WHEN V.BEFORE_YEAR_VALUE IS NULL THEN
0
ELSE
(T.KPI_VALUE - V.BEFORE_YEAR_VALUE) / V.BEFORE_YEAR_VALUE
END
FROM (
SELECT B.KPI_VALUE BEFORE_YEAR_VALUE,
B.ORG_ID,
B.KPI_ID,
B.PROJECT_CATEGORY_ID
FROM DM_TZJH_WCL B
WHERE B.CY_ID = '201304'
) V
WHERE T.ORG_ID = V.ORG_ID (+)
AND T.KPI_ID = V.KPI_ID (+)
AND T.PROJECT_CATEGORY_ID = V.PROJECT_CATEGORY_ID (+)
)
WHERE T.CY_ID = '201404';
------解决方案--------------------
你的子查询没有符合条件的记录,oracle默认子查询返回0行时,都将数据更新为空
各位大侠,帮看一下啥问题
表结构
想实现的目标是更新YEAR_BASIS_BAK(本机测试,字段名大家不用纠结,实际是要更新YEAR_BASIS的,不过由于目前只有201404数据,YEAR_BASIS字段手工造了0)字段值为同比值,计算方法是
同比=(本期值-去年同期值)/去年同期值
由于目前的表里只有201404(2014年4月份)的数据,为了更新到同比值,跟自己关联历史值是用了左关联,不过貌似出不来结果,各位帮帮忙看看什么问题
UPDATE DM_TZJH_WCL T
SET T.YEAR_BASIS_BAK =
(
SELECT CASE
WHEN V.BEFORE_YEAR_VALUE = 0 THEN
0
WHEN V.BEFORE_YEAR_VALUE IS NULL THEN
0
ELSE
(T.KPI_VALUE - V.BEFORE_YEAR_VALUE) / V.BEFORE_YEAR_VALUE
END
FROM (
SELECT B.KPI_VALUE BEFORE_YEAR_VALUE,
B.ORG_ID,
B.KPI_ID,
B.PROJECT_CATEGORY_ID
FROM DM_TZJH_WCL B
WHERE B.CY_ID = '201304'
) V
WHERE T.ORG_ID = V.ORG_ID (+)
AND T.KPI_ID = V.KPI_ID (+)
AND T.PROJECT_CATEGORY_ID = V.PROJECT_CATEGORY_ID (+)
)
WHERE T.CY_ID = '201404';
------解决方案--------------------
你的子查询没有符合条件的记录,oracle默认子查询返回0行时,都将数据更新为空