sql查询问题?(30分)

  • 主题发起人 主题发起人 lbylby
  • 开始时间 开始时间
L

lbylby

Unregistered / Unconfirmed
GUEST, unregistred user!
我有两个流水帐记录表!结构如下:
in表 :
name count date
a 10 2002-8-15
b 20 2002-8-15
a 30 2002-8-16
out表:
name count date
a 8 2002-8-15
b 5 2002-8-15
a 10 2002-8-16

现在我想根据日期来个汇总,比如我输入8月份的时间其可得到如下的结果:
name count
a 22
b 15
这样的sql语句怎么写啊?
 
Select name,Count= Sum(a.Count-b.Count)
From In a, Out b
Where A.Name= B.Name And month(a.Date) = 8 And Month(b.Date) = 8
Group By a.Name
 
有这么设计表结构的吗?本来就应该用一个表 ,用一个字段进行标示是入还是出
 
q1,q2:query;
q1:select distinct name from in where date='8';
if (q1.recordcount<>0)and(q1.fieldbyname('name').asstring<>'')then
begin
q1.first;
while not q1.eof do
begin
q2: select sum(count) as count from in where (name=:a)and(date='8')
q2.parabyname('a')。asstring:=q1.fieldbyname('name').asstring;
q1.next;
end;
end;
对于out表相同,
然后在query的onCalcFields事件中对查询出的数据进行处理
以上是我的一点拙见,如有不正确的地方敬请指正
 
表结构怎么这样设计,一张表完全可以完成你的要求!
 
这样的表设计我认为是很合理的。
Select name,Sum(Count)
(
Select a.name as name,a.Count-B.Count as Count
From In a, Out b
Where A.Name= B.Name And
Year(a.Date)=2002 and Year(b.Date)=2002 and
month(a.Date) = 8 And Month(b.Date) = 8
) C Group by name
 
MSSQL中的写法
select name,sum(count) as count
from (select name,count,date from [in]
union
select name,-count as count,date from out) AAA
where year(date)=2002 and month(date)=8
group by name

ACCESS的写法
select name,sum(count1) as count
from (select name,count as count1,date from [in]
union
select name,-count as count1,date from out)
where year(date)=2002 and month(date)=8
group by name

因in与保留字冲突,所以要加[]以示区别

在表设计上我认同bigheadhy和findok两位的观点,
如你in与out表结构简单且相似的话,合为一个表更加合适。
 
我只是把一个很复杂的表,
要实现的功能简化成这样的,我知道怎么做了,
我要试试看看还有什么问题,没有就放分!
 
我忘了两个功能,现在加上,各位看看怎么写sql语句!
我有两个流水帐记录表!结构如下:
in表 :
name count date
a 10 2002-8-15
b 20 2002-8-15
a 30 2002-8-16
out表:
name count date
a 8 2002-8-15
b 5 2002-8-15
a 10 2002-8-16

现在我想根据日期来个汇总,比如我输入8月份的时间其可得到如下的结果:
name a.count b.count count
a 40 18 22
b 20 5 15
这样的sql语句怎么写啊?
 
--在MSSQL下运行通过
SELECT A.NAME,A.[COUNT],B.[COUNT],A.[COUNT]-B.[COUNT]
FROM
(select name,sum([count]) AS [COUNT] from [in] where year(date)=2002 and month(date)=8 GROUP BY NAME ) A --汇总IN表
LEFT JOIN
(select name,sum([count]) AS [COUNT] from [OUT] where year(date)=2002 and month(date)=8 GROUP BY NAME ) B --汇总OUT表
ON
A.NAME=B.NAME
 
多人接受答案了。
 
后退
顶部