查看: 1308|回复: 13
|
这样的SQL Query 要如何写?
[复制链接]
|
|
我有三个table
1.cashbill
field的名字 cbno,customerid,productid,amount
2.cashsales
field的名字 csno,customerid,productid,amount
3.return
field的名字rtno,customerid,productid,amount
请问如何用SQL计算这三个table里相同customerid 的amount ,
那就是
amount = cashbill amount + cashsales amount - return amount
例如
cashbill
cbno customerid productid amount
10001 0001 1111 100
10002 0002 1111 100
10003 0001 1100 120
cashsales
csno customerid productid amount
20001 0003 1121 50
20002 0003 1110 230
20003 0001 1000 100
return
rtno customerid productid amount
3001 0001 1111 100
3002 0002 1111 100
出来的result
result table
customerid amount
0001 220
0002 0
0003 280 |
|
|
|
|
|
|
|
发表于 3-11-2006 05:21 PM
|
显示全部楼层
直接给你答案就不太好。。
给你一个idea
你可以union cashbill,cashsales,然后sum amount by customerid
再来sum return.amount
最后union query的sum amount - return.amount
很简单的 |
|
|
|
|
|
|
|
发表于 4-11-2006 09:12 AM
|
显示全部楼层
原帖由 max5007 于 3-11-2006 05:21 PM 发表
直接给你答案就不太好。。
给你一个idea
你可以union cashbill,cashsales,然后sum amount by customerid
再来sum return.amount
最后union query的sum amount - return.amount
很简单的
max兄,是不是先做union过后,再拿union来create query? |
|
|
|
|
|
|
|
发表于 4-11-2006 11:37 AM
|
显示全部楼层
原帖由 程家伟 于 4-11-2006 09:12 AM 发表
max兄,是不是先做union过后,再拿union来create query?
错^^
union后就把这当作一个sub query,然后join 另一个table...然后就减 |
|
|
|
|
|
|
|
发表于 4-11-2006 02:56 PM
|
显示全部楼层
我会将那三个Table合成一个。只要Index正确,我想performance将会更好。 |
|
|
|
|
|
|
|
发表于 5-11-2006 01:43 AM
|
显示全部楼层
原帖由 hkloke2000 于 4-11-2006 02:56 PM 发表
我会将那三个Table合成一个。只要Index正确,我想performance将会更好。
对。这可以用一个query做完..但又很多的做法^^ |
|
|
|
|
|
|
|
楼主 |
发表于 6-11-2006 10:14 AM
|
显示全部楼层
原帖由 max5007 于 3-11-2006 05:21 PM 发表
直接给你答案就不太好。。
给你一个idea
你可以union cashbill,cashsales,然后sum amount by customerid
再来sum return.amount
最后union query的sum amount - return.amount
很简单的
max兄,这个方法需要用几个QUERY来完成? |
|
|
|
|
|
|
|
楼主 |
发表于 6-11-2006 10:20 AM
|
显示全部楼层
原帖由 max5007 于 4-11-2006 11:37 AM 发表
错^^
union后就把这当作一个sub query,然后join 另一个table...然后就减
这里不是很明白,可以给些SQL例子吗? |
|
|
|
|
|
|
|
楼主 |
发表于 6-11-2006 10:25 AM
|
显示全部楼层
原帖由 hkloke2000 于 4-11-2006 02:56 PM 发表
我会将那三个Table合成一个。只要Index正确,我想performance将会更好。
我也想三个Table合成一个,不过没办法一定要用三个Table。 |
|
|
|
|
|
|
|
发表于 6-11-2006 10:26 AM
|
显示全部楼层
原帖由 chewkit 于 6-11-2006 10:14 AM 发表
max兄,这个方法需要用几个QUERY来完成?
只要一个query就可以了
原帖由 chewkit 于 6-11-2006 10:20 AM 发表
这里不是很明白,可以给些SQL例子吗?
SELECT (sum(A.XXX) - sum(B.XXX)) as XXX FROM
(SELECT XXX FROM XXX
UNION ALL
SELECT XXX FROM XXX) A,RETURN B
WHERE A.XXX=B.XXX
类似这样。。但如果你要拿到正确的答案。。你还有修改query |
|
|
|
|
|
|
|
楼主 |
发表于 6-11-2006 03:01 PM
|
显示全部楼层
以下是我的写的SQL QUERY
select a.customerid,(sum(a.amount) - sum(b.amount))as amount from
(select customerid,amount from cashbill
union
select customerid,amount from cashsales)as a
left join
sreturn as b on a.customerid = b.customerid group by a.customerid
出来的答案竟然是
customerid amount
0001 20.00
0002 0.00
0003 NULL
到底是那里出了错? |
|
|
|
|
|
|
|
发表于 6-11-2006 04:10 PM
|
显示全部楼层
select s.customerid,sum(s.amount) as amount from(
select a.customerid,a.amount
from cashbill a
union all
select b.customerid,b.amount
from cashsales b
union all
select c.customerid,c.amount*-1
from return c
)s
group by s.customerid |
|
|
|
|
|
|
|
发表于 6-11-2006 07:06 PM
|
显示全部楼层
回复 #11 chewkit 的帖子
建议你分开query会比较简单,即先将三个表用union合成一个view table,再用sum function 从view table那里拿出来就行。一般上我都是这样弄的 |
|
|
|
|
|
|
|
楼主 |
发表于 7-11-2006 08:30 AM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|