本文发表在 rolia.net 枫下论坛能不能改漂亮些...
原表其实没有ID, 有三个PK列 -- company, customer, year, 然后是m1 ... m12.
我现在想建一个新的表, 有四列 -- company, customer, cur_year_ytd, prev_year_ytd.
前一半(求和), 大侠们的建议都不错, 考虑到我自己的水平, 我选用了looi500和digitworm两位大侠的case方法. bluebluesky大侠的decode方法, 看起来更简洁一些, 可惜是Oracle专用的. 我们SQL Server不支持.
下面是我自己的solution. 可以运行, 结果也是正确的. 缺点是同样的求和code运行了两遍. 一则不好看, 二则运行速度可能慢, 特别是用到了full outer join. 数据量会很大. 虽然因为这段code是定时在夜间运行, 对performance要求不太高, 我自己还是看着它不舒服.
请高手们再帮帮忙...
select c.company company,
c.customer customer,
c.cur_year_ytd cur_year_ytd,
p.prev_year_ytd prev_year_ytd
into newtable
from
(
select company, customer,
case @numMon
when 1 then m1
when 2 then m1 + m2
...
when 12 then m1 + m2 + .... + m12
end as cur_year_ytd
from oldtable
where year = @cur_yr
) c
full outer join
(
select company, customer,
case @numMon
when 1 then m1
when 2 then m1 + m2
...
when 12 then m1 + m2 + .... + m12
end as prev_year_ytd
from oldtable
where year = @pre_yr
) p
on c.company = p.company and c.customer = p.customer
where c.cur_year_ytd > 0.00 or p.prev_year_ytd > 0.00更多精彩文章及讨论,请光临枫下论坛 rolia.net
原表其实没有ID, 有三个PK列 -- company, customer, year, 然后是m1 ... m12.
我现在想建一个新的表, 有四列 -- company, customer, cur_year_ytd, prev_year_ytd.
前一半(求和), 大侠们的建议都不错, 考虑到我自己的水平, 我选用了looi500和digitworm两位大侠的case方法. bluebluesky大侠的decode方法, 看起来更简洁一些, 可惜是Oracle专用的. 我们SQL Server不支持.
下面是我自己的solution. 可以运行, 结果也是正确的. 缺点是同样的求和code运行了两遍. 一则不好看, 二则运行速度可能慢, 特别是用到了full outer join. 数据量会很大. 虽然因为这段code是定时在夜间运行, 对performance要求不太高, 我自己还是看着它不舒服.
请高手们再帮帮忙...
select c.company company,
c.customer customer,
c.cur_year_ytd cur_year_ytd,
p.prev_year_ytd prev_year_ytd
into newtable
from
(
select company, customer,
case @numMon
when 1 then m1
when 2 then m1 + m2
...
when 12 then m1 + m2 + .... + m12
end as cur_year_ytd
from oldtable
where year = @cur_yr
) c
full outer join
(
select company, customer,
case @numMon
when 1 then m1
when 2 then m1 + m2
...
when 12 then m1 + m2 + .... + m12
end as prev_year_ytd
from oldtable
where year = @pre_yr
) p
on c.company = p.company and c.customer = p.customer
where c.cur_year_ytd > 0.00 or p.prev_year_ytd > 0.00更多精彩文章及讨论,请光临枫下论坛 rolia.net