
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)这样会错。 展开
表 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)这样会错。 展开
8个回答
展开全部
搞不清楚你要什么,请把你希望得到的结果放出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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 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;
经过测试没问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select SUM(aa) a,SUM(bb) b
FROM
(select C,A aa,SUM(B) bb
FROM Z
GROUP BY C,A)
原来在FROM后面是可以对子查询表进行操作的啊,学习了
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之类的是临时的别名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select c.客户名称,a.应收款,sum(b.已付款) as 已付款 from a,b,c where c.客户名称 = a.客户名称 and c.客户名称 = b.客户名称 and a.应收款 between '时间' and '时间'
得到的结果肯定是正确的。
这里的条件最重要,但有一点要明白, 你这三个表的关联是以什么为主,客户编号吗?还是客户名称,一般应该是客户编号
得到的结果肯定是正确的。
这里的条件最重要,但有一点要明白, 你这三个表的关联是以什么为主,客户编号吗?还是客户名称,一般应该是客户编号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
据我分析,一条语句不能实现,只能写段脚本来实现了,如下:
@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
@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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询