設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 2173|回復(fù): 4
打印 上一主題 下一主題

[查詢] 從某班級中取3人按矮中高排列變成表2,把所有的排列組合都弄出來

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2015-12-30 08:02:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我把問題形象化,表1是一個班級同學(xué)的身高,從矮到高。想從中取3人按矮中高分別寫入字段(身高矮、身高中、身高高)的每行中變成表2(只要每行字段1中的身高矮、字段2中、字段3高即可,不與其他行對比),把所有的排列組合都弄出來。

表1
身高
A1
A2
...
An

如果班級有5人,則

表2
身高矮        身高中        身高高
A1                A2                A3
A1                A2                A4
A1                A2                A5
A1                A3                A4
A1                A3                A5
A1                A4                A5
A2                A3                A4
A2                A3                A5
A2                A4                A5
A3                A4                A5
B1                B2                B3

如果班級有n人,
則字段1范圍是Ai,i=1到n-2
則字段2范圍是Aj,j=i+1到n-1
則字段3范圍是Ak,k=j+1到n


進一步,
Ai是A班同學(xué)身高,Bi是B班同學(xué)身高,Ci是C班同學(xué)身高,
按照上述排法,怎樣把表1變成表2

謝謝!

表1
身高        班級       
A1        A班       
A2        A班       
A3        A班       
A4        A班       
A5        A班       
B1        B班       
B2        B班       
B3        B班       
C1        C班       
C2        C班       
C3        C班       
C4        C班       
C5        C班       
C6        C班       

表2       
身高矮        身高中        身高高        班級
A1                A2                A3                A班
A1                A2                A4                A班
A1                A2                A5                A班
A1                A3                A4                A班
A1                A3                A5                A班
A1                A4                A5                A班
A2                A3                A4                A班
A2                A3                A5                A班
A2                A4                A5                A班
A3                A4                A5                A班
B1                B2                B3                B班
C1                C2                C3                C班
C1                C2                C4                C班
C1                C2                C5                C班
C1                C2                C6                C班
C1                C3                C4                C班
C1                C3                C5                C班
C1                C3                C6                C班
C1                C4                C5                C班
C1                C4                C6                C班
C1                C5                C6                C班
C2                C3                C4                C班
C2                C3                C5                C班
C2                C3                C6                C班
C2                C4                C5                C班
C2                C4                C6                C班
C2                C5                C6                C班
C3                C4                C5                C班
C3                C4                C6                C班
C3                C5                C6                C班
C4                C5                C6                C班

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2015-12-30 14:14:16 | 只看該作者
'執(zhí)行代碼前先引用Microsoft ActiveX Data Object  2.8 Library
  1. Sub test()
  2.     Dim rst1 As New ADODB.Recordset
  3.     Dim rst2 As New ADODB.Recordset
  4.     Dim rst3 As New ADODB.Recordset
  5.     Dim i As Long, j As Long, k As Long
  6.     Dim Arr
  7.     rst1.Open "select distinct 班級 from 測試數(shù)據(jù)", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  8.     Do Until rst1.EOF
  9.         rst2.Open "select 姓名 from 測試數(shù)據(jù) where 班級='" & rst1(0) & "'", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  10.         rst3.Open "結(jié)果表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  11.         Arr = rst2.GetRows()
  12.         For i = 0 To UBound(Arr, 2)
  13.             For j = i + 1 To UBound(Arr, 2)
  14.                 For k = j + 1 To UBound(Arr, 2)
  15.                     rst3.AddNew
  16.                     rst3(0) = Arr(0, i)
  17.                     rst3(1) = Arr(0, j)
  18.                     rst3(2) = Arr(0, k)
  19.                     rst3(3) = rst1(0)
  20.                 Next
  21.             Next
  22.         Next
  23.         rst3.UpdateBatch
  24.         rst3.Close
  25.         rst2.Close
  26.         rst1.MoveNext
  27.     Loop
  28.     rst1.Close
  29. End Sub
復(fù)制代碼

附上2007版本附件,如果你的是2003的話,請新建一個模塊,把上述代碼貼上,在VBE界面下,按下F5執(zhí)行即可。

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
3#
 樓主| 發(fā)表于 2015-12-30 22:14:27 | 只看該作者
謝謝版主答復(fù)。
結(jié)果非常好。

同樣問題,Sql Server用查詢解決了。
http://bbs.csdn.net/topics/391883340
我試著用查詢在Access上實現(xiàn),失敗了。

請教版主,可否用查詢在Access上實現(xiàn)?
4#
發(fā)表于 2015-12-31 10:46:13 | 只看該作者
bfwz 發(fā)表于 2015-12-30 22:14
謝謝版主答復(fù)。
結(jié)果非常好。

Access里沒有遞歸查詢,沒法解決。
5#
 樓主| 發(fā)表于 2015-12-31 11:15:40 | 只看該作者
再次謝謝版主答復(fù)。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 08:29 , Processed in 0.093237 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表