********* 求一个很难的SQL表达式 ************
A表
id , a1 , num
==========================
1 bb 10
2 cc 15
B表
id , a1 , num ,stype
=============================
1 bb 3 0
2 bb 5 1
3 cc 20 0
...............
问题:能否用一个语句完成:统计出A表和B表中a1字段的总和
要求B表中stype=0的num*20,smtype=1的num*30 与A表中num字段之总和
即结果为
bb 10+(3*20)+(5*30)
cc 15+(20*20)
该如何用完成??谢谢
问题点数:50、回复次数:6Top
1 楼Novolee(人民子弟兵)(http://biglee.cn/?c)回复于 2006-02-05 21:50:52 得分 0
用子查询估计可以完成。Top
2 楼iuhxq(小灰)回复于 2006-02-06 01:29:33 得分 0
一条SQL 语句估计无法完成,用存储过程吧Top
3 楼zys59(三仙半)回复于 2006-02-06 02:20:46 得分 0
我试验了半天一个SQL没有实现,后来做了两个UPDATE实现了,你也这样试试,其实你要的是更新数据的功能,实现是第一位的,至于几次UPDATE不用那么在意吧!Top
4 楼mm2love2zz(never stop.)回复于 2006-02-06 04:17:01 得分 20
select a.a1,sum(
a.num+(case when b.stype=0
then b.num*20
when b.stype=1
then b.num*30
end))-(a.num*(count(b.a1)-1)) as 'sum'
from a,b where a.a1=b.a1
group by b.a1,a.a1,a.num
order by b.a1
如果执行的有问题,加qq:26081763,尽量帮你解决!~Top
5 楼xiaoyuehen(OH, NO~It's Unfair!)回复于 2006-02-06 08:47:28 得分 30
Access:
SELECT a1, SUM([num]) AS [num] FROM (SELECT a1, IIF(stype = 3, [num] * 100, IIF(stype = 5, [num] * 2, [num])) AS [num] FROM TABLEA
UNION ALL
SELECT a1, [num] FROM TABLEB) AS B
GROUP BY a1
SQL Server:
SELECT a1, SUM([num]) AS [num] FROM
(SELECT a1, (CASE WHEN stype = 3 THEN [num] * 266 WHEN stype = 5 THEN [num] * 2 ELSE [num] END) AS [num] FROM TABLEA
UNION ALL
SELECT a1, [num] FROM TABLEB) AS B
GROUP BY a1Top
6 楼iuhxq(小灰)回复于 2006-02-06 10:33:12 得分 0
pfTop




