SQL语句高手请进,有难度

SQL2000表A(应收款)和B(已付款)C(客户名称)这是有资料日期的,每个客户,每个月只有一个应收款。因为付款不一定会一次付清所以表是这样的情况假设:A(应收款)B(... SQL2000

表 A(应收款)和B(已付款)C(客户名称)

这是有资料日期的,每个客户,每个月只有一个应收款。

因为付款不一定会一次付清所以 表是这样的情况

假设:

A (应收款) B(已付款) C(客户名称)

50000 10000 航海模具

50000 20000 航海模具

60000 12000 海天科技

问题来了,我是要汇总各个客户的 A(应收款)和B(已付款),但是每个客户只对应一个应收款。 我用sum(b) 那同一个客户会出现多条记录,如果sum(a)和(b),那A的结果肯定是错的。请问我该如何做?也可以加QQ,实在是绞尽脑汁。谢谢!
要求出所有客户的应收款(A)已付款(B),如果sum(a)和sum(b)这样会错。
展开
 我来答
yonggang_xue
2011-08-31 · TA获得超过120个赞
知道小有建树答主
回答量:96
采纳率:0%
帮助的人:110万
展开全部

select c,a,sum(b) from kehu_table aa group by a,c

更多追问追答
追问
非常感谢你这么详细的回答,对不起,我问题可能没说的很清楚。
我是要求出所有客户的应收款和已经收到的款。
你能帮我想想吗?
追答
意思是两次的50000 不是同一订单? 没搞明白
BraveHeart_Fov
2011-08-31 · TA获得超过7942个赞
知道小有建树答主
回答量:1037
采纳率:0%
帮助的人:731万
展开全部
搞不清楚你要什么,请把你希望得到的结果放出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nightgoblin
2011-08-31 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:84
采纳率:0%
帮助的人:94万
展开全部
CREATE TABLE test
(a number,
b number,
c varchar2(10));

INSERT INTO test VALUES(50000,10000,'航海模具');
INSERT INTO test VALUES(50000,20000,'航海模具');
INSERT INTO test VALUES(60000,10000,'海天科技');

SELECT c,SUM(a),SUM(b) FROM test GROUP BY c;
经过测试没问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大番薯a
2011-08-31
知道答主
回答量:4
采纳率:0%
帮助的人:2.8万
展开全部
select SUM(aa) a,SUM(bb) b
FROM
(select C,A aa,SUM(B) bb
FROM Z
GROUP BY C,A)
原来在FROM后面是可以对子查询表进行操作的啊,学习了
追问
我也知道,程序还是严谨的好。
如果有相同的数目就惨了。
追答
A (应收款)        B(已付款)         C(客户名称)

50000 10000 航海模具

50000 20000 航海模具

60000 12000 海天科技

这个表叫 Z 然后这样查询就不会重复了拉,哈哈
select SUM(aa) a,SUM(bb) b
FROM
(select C,A aa,SUM(B) bb
FROM Z
GROUP BY C,A)

aa和bb之类的是临时的别名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e25fdac64
2011-08-31 · TA获得超过143个赞
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:89.7万
展开全部
select  c.客户名称,a.应收款,sum(b.已付款) as 已付款 from a,b,c where c.客户名称 = a.客户名称 and c.客户名称 = b.客户名称 and a.应收款 between '时间' and '时间'

得到的结果肯定是正确的。
这里的条件最重要,但有一点要明白, 你这三个表的关联是以什么为主,客户编号吗?还是客户名称,一般应该是客户编号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
禄材q5
2011-09-01 · TA获得超过2.5万个赞
知道大有可为答主
回答量:2.1万
采纳率:0%
帮助的人:1.3亿
展开全部
据我分析,一条语句不能实现,只能写段脚本来实现了,如下:
@i 和 @seed都声明为float类型,主要是为了适应,比如条件为6的情况。

declare @i float
declare @seed float
set @i=5
set @seed=(5000-100) / (@i*1.)
declare @j int
set @j=0
while @j<=@i
begin
print cast(@j+1 as varchar(10)) +char(9)+cast((5000-@j*@seed) as varchar(10))
set @j=@j+1
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式