table t1
id flag num
1 1 3
1 2 4
1 2 3
1 3 2
2 2 3
2 3 4
3 3 4
3 1 2
4 2 1
5 1 3
table t2
id num
1 3
1 1
3 2
对于各个id 计算其sum=t1.num*2(若 flag =1)+t1.num(若flag=2)-t1.num*0.5(若flag=3)-t2.num*2
输出
id sum
1 8 3*2+(4+3)-2*0.5-(3+1)=8
2 1 3-4*0.5=1
3 0 2*2-4*(0.5)-2=0
4 1
5 6 3*2=6
[b]问题补充:[/b]
id为1的计算是我写错了,应该是3*2+(4+3)-2*0.5-(3+1)×2=4
[b]问题补充:[/b]
SELECT A.ID,
SUM(DECODE(A.FLAG, 1, A.NUM * 2, 2, A.NUM, 3, -A.NUM * 0.5)) +
(SELECT -NVL(SUM(NUM), 0) * 2 FROM T2 WHERE ID = A.ID)
FROM T1 A
GROUP BY ID
ORDER BY ID
运行后提示表名'a'无法识别
[b]问题补充:[/b]
求某id的sum ,公式是
sum=t1.num*2(若 flag =1)+t1.num(若flag=2)-t1.num*0.5(若flag=3)-t2.num*2
[b]问题补充:[/b]
polymorph答案的对的,我写错了。
你的公式和结果有出入,最后你减的是-t2.num*2,而你结果没乘以2。
我暂时就按照乘以2来算了,还有就是id改成user_id了。
参考下面SQL,如果公式不同,你自己改改吧:
SELECT A.USER_ID,
SUM(DECODE(A.FLAG, 1, A.NUM * 2, 2, A.NUM, 3, -A.NUM * 0.5)) +
(SELECT -NVL(SUM(NUM), 0) * 2 FROM T2 WHERE USER_ID = A.USER_ID)
FROM T1 A
GROUP BY USER_ID
ORDER BY USER_ID
sum=t1.num*2(若 flag =1)+t1.num(若flag=2)-t1.num*0.5(若flag=3)-t2.num*2
3*2+(4+3)-2*0.5-(3+1)=8
(3+1) t2.num*2这里有点不明白,可以再把公式写清楚一点吗?
忽略了一点,这里用了一个ORALCE的函数NVL。如果是别的数据库,我不是很清楚对于空值是如何处理的,你参考一下相关的文档吧。
请重新把公式写清楚点吧。
你使用的是什么数据库?
之前的回帖也说过,如果不是ORALCE的话,是没有NVL函数的。报错估计是这个原因。但是你又需要处理空值。你参考相关的文档,看看你所用的数据库对空值是怎么处理的吧。