急救!(300分)

  • 主题发起人 主题发起人 allok
  • 开始时间 开始时间
A

allok

Unregistered / Unconfirmed
GUEST, unregistred user!
利用DELPHI,有一字段含有N条记录(内容分别是:A B C)如何统计该字段(为文本字段)中A的个数,B的总个数,C的出现总个数及它们在N条记录中占的比率
 
A的个数,B的总个数,C的出现总个数,用如下语句:
select count(*) from table group by 字段名
比率自己算.
你的数据库类型是什么?
 
sql server中:
declare totalnum int
select totalnum=count(*) from tablename
select *,count(*),count(*)/totalnum from tablename
 
自己作个存储过程来统计。
思路:
1: N条记录(内容分别是:A B C),那A,B,C肯定有不同指出,比如A的第NA个
字符是起特有的,A的第NB个字符是起特有的,C的NC字符是起特有的
2: 伪代码(T-SQL):

declare @ANO=0,@BNO=0,@CNO=0,@TotalNO=0
declare @PageStr varbinary(16)
select @PageStr=textptr(TextFiled)
from YourTable
where IDFiled=YourID;
如果 readtext YourTable.Textfiled @PageStr NA 1(或2,3,...) =A的特征
@ANO加1
如果 readtext YourTable.Textfiled @PageStr NB 1(或2,3,...) =B的特征
@BNO加1
如果 readtext YourTable.Textfiled @PageStr NC 1(或2,3,...) =C的特征
@CNO加1
如此循环.

以上只是个人意见,不一定行得通.
 
(今天多次连不上,现在终于能够贴上来了。)
var a1,b1,c1,total: real;
begin
Query1.Close;
Queyr1.SQL.Clear;
Query1.SQL.Add('select count(字段) from 数据库名 where 字段 = A');
Query1.Open;
a1:=Query1.Fields[0].AsFloat;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select count(字段) from 数据库名 where 字段 = B');
Query1.Open;
b1:=Query1.Fields[0].AsFloat;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select count(字段) from 数据库名 where 字段 =C');
Query1.Open;
c1:=Query1.Fields[0].AsFloat;
total:=a1+b1+c1;
//totol等于总记录数
a1:=(a1/total)*100;
b1:=(b1/total)*100;
c1:=(c1/total)*100;
MessageBox(0,Pchar(Format('A占总数的百分之%d, B占总数的百分之%d,
C占总数的百分之%d',[a1,b1,c1])),'',MB_OK);
end;
 
如果你能找到A,B,C的特征字符串就好了。
测试环境: Win98+MSSQL 7.0
设文本字段为TextField
设文本字段值A的特征字符: 'AAAAAA'
设文本字段值B的特征字符: 'BBBBBB'
设文本字段值C的特征字符: 'CCCCCC'
select AA.ANO*100/TT.TotalNO A_Ratio,BB.BNO*100/TT.TotalNO B_Ratio,CC.CNO*100/TT.TotalNO C_Ratio
from (select Count(*) TotalNO
from test) TT,
(select Count(*) ANO
from test
where PATINDEX('%AAAAAA%',TextField)>0) AA,
(select Count(*) BNO
from test
where PATINDEX('%BBBBBB%',TextField)>0) BB,
(select Count(*) CNO
from test
where PATINDEX('%CCCCCC%',TextField)>0) CC
 
数据库类型是access,记录内容分别仅是A 或仅是B或仅是C。多谢hawkview
Sachow、千中元、沈前卫
 
Sachow的方法好象很好啊!
简单明了,我喜欢。
 
我认为这样可以:
var a1,b1,c1:Integer;
begin
a1:=0;b1:=0;c1:=0;
table1.first;
while not table1.Eofdo
begin
if table1.FieldByName('aa').asstring='A' then
a1:=a1+1;
if table1.FieldByName('aa').asstring='B' then
b1:=b1+1;
if table1.FieldByName('aa').asstring='C' then
c1:=c1+1;
TABLE1.Next;
end;
end;
至于百分比就简单啦,将a1+b1+c1得到总数,再计算即可。
 
多人接受答案了。
 
后退
顶部