Private Sub Command1_Click() Dim NLD(1 To 4) As String, RS(1 To 4) As Integer '定义了二个数组变量 NLD(1) = "20到29岁" NLD(2) = "30到39岁" NLD(3) = "40到49岁" NLD(4) = "50到59岁" Adodc1.RecordSource = "Select ID,年龄 From 购车记录" Adodc1.Refresh Do While Not Adodc1.Recordset.EOF If Adodc1.Recordset.Fields("年龄") >= 20 And Adodc1.Recordset.Fields("年龄") < 30 Then RS(1) = RS(1) + 1 ElseIf Adodc1.Recordset.Fields("年龄") >= 30 And Adodc1.Recordset.Fields("年龄") < 40 Then RS(2) = RS(2) + 1 ElseIf Adodc1.Recordset.Fields("年龄") >= 40 And Adodc1.Recordset.Fields("年龄") < 50 Then RS(3) = RS(3) + 1 ElseIf Adodc1.Recordset.Fields("年龄") >= 50 And Adodc1.Recordset.Fields("年龄") < 60 Then RS(4) = RS(4) + 1 End If Adodc1.Recordset.MoveNext Loop MSHFlexGrid1.Clear With MSHFlexGrid1 .Cols = 3 .Rows = 5 .TextMatrix(0, 1) = "年龄段" .TextMatrix(0, 2) = "人数" .ColWidth(0) = 400 .ColWidth(1) = 1000 .ColWidth(2) = 1000 For I = 1 To 4 .TextMatrix(I, 1) = NLD(I) .TextMatrix(I, 2) = RS(I) Next I End With End Sub 数据库连接语句略,购车记录的数据表是随意创建的,你可以根据你的数据表就可以了。
不用 3 楼那么麻烦,用 Partition 函数就可以。假定你已经知道如何用 Connection 对象连接数据库,且使用了 cn 对象变量:rs.Open "SELECT DISTINCTROW Partition([年龄],0, 60, 10) AS [年龄段], Count(购车记录.ID) As [人数] From 购车记录 GROUP BY Partition([年龄],0,60,10)", cnSet DataGrid1.DataSource = rs
group by直接解决,分类汇总么.
姓名 年龄 ============== 张三 23 李四 51 王五 32 。 。select convert(varchar(5),段)+'0-'+convert(varchar(5),段)+'9' as 年龄段,人数 from ( select 年龄/10 as 年龄段,count(distinct 姓名) as 人数 from 购车表 group by 年龄/10 )试试看
Private Sub Command1_Click()
Dim NLD(1 To 4) As String, RS(1 To 4) As Integer '定义了二个数组变量
NLD(1) = "20到29岁"
NLD(2) = "30到39岁"
NLD(3) = "40到49岁"
NLD(4) = "50到59岁"
Adodc1.RecordSource = "Select ID,年龄 From 购车记录"
Adodc1.Refresh
Do While Not Adodc1.Recordset.EOF
If Adodc1.Recordset.Fields("年龄") >= 20 And Adodc1.Recordset.Fields("年龄") < 30 Then
RS(1) = RS(1) + 1
ElseIf Adodc1.Recordset.Fields("年龄") >= 30 And Adodc1.Recordset.Fields("年龄") < 40 Then
RS(2) = RS(2) + 1
ElseIf Adodc1.Recordset.Fields("年龄") >= 40 And Adodc1.Recordset.Fields("年龄") < 50 Then
RS(3) = RS(3) + 1
ElseIf Adodc1.Recordset.Fields("年龄") >= 50 And Adodc1.Recordset.Fields("年龄") < 60 Then
RS(4) = RS(4) + 1
End If
Adodc1.Recordset.MoveNext
Loop
MSHFlexGrid1.Clear
With MSHFlexGrid1
.Cols = 3
.Rows = 5
.TextMatrix(0, 1) = "年龄段"
.TextMatrix(0, 2) = "人数"
.ColWidth(0) = 400
.ColWidth(1) = 1000
.ColWidth(2) = 1000
For I = 1 To 4
.TextMatrix(I, 1) = NLD(I)
.TextMatrix(I, 2) = RS(I)
Next I
End With
End Sub
数据库连接语句略,购车记录的数据表是随意创建的,你可以根据你的数据表就可以了。
==============
张三 23
李四 51
王五 32
。
。select convert(varchar(5),段)+'0-'+convert(varchar(5),段)+'9' as 年龄段,人数 from
(
select 年龄/10 as 年龄段,count(distinct 姓名) as 人数 from 购车表 group by 年龄/10
)试试看