佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1308|回复: 13

这样的SQL Query 要如何写?

[复制链接]
发表于 3-11-2006 04:18 PM | 显示全部楼层 |阅读模式
我有三个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
回复

使用道具 举报


ADVERTISEMENT

发表于 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做完..但又很多的做法^^
回复

使用道具 举报

Follow Us
 楼主| 发表于 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例子吗?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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 | 显示全部楼层
已经知道如何写了,谢谢各位宝贵的意见和答案。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 12-11-2024 10:03 AM , Processed in 0.140441 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表