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

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

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

[Access本身] 求助:這個查詢代碼如何寫?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2012-6-16 11:12:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
附件db.mdb中有2個表:學(xué)校、表1。 請教諸位:現(xiàn)要在窗體1中點擊 更新 按鈕后,根據(jù)右側(cè)子窗體內(nèi)容 生成左側(cè)列表 內(nèi)容。謝謝。ㄗⅲ河覀(cè)子窗體中記錄數(shù)是不確定的,但至少2條)

本帖子中包含更多資源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2012-6-16 11:52:25 | 只看該作者
描述不清,表1應(yīng)該是不存在的,只是你想要的結(jié)果對嗎?
3#
發(fā)表于 2012-6-16 12:38:59 | 只看該作者
本帖最后由 anthonywang9 于 2012-6-16 12:40 編輯

試試這個
SELECT *
FROM
(SELECT ID as 組合ID,學(xué)校 as 組合學(xué)校,代碼 as 組合代碼
from 學(xué)校
union
SELECT [a.ID]&[b.ID] AS 組合ID, [a.學(xué)校]&";"&[a.代碼]&";"&[b.學(xué)校]&";"&[b.代碼] AS 組合學(xué)校, [a.代碼]&"/"&[b.代碼] AS 組合代碼
FROM 學(xué)校 AS a, 學(xué)校 AS b
WHERE a.ID<b.ID
union
SELECT [a.ID]&[b.ID]&[c.ID] AS 組合ID, [a.學(xué)校]&";"&[a.代碼]&";"&[b.學(xué)校]&";"&[b.代碼]&";"&[c.學(xué)校]&";"&[c.代碼] AS 組合學(xué)校, [a.代碼]&"/"&[b.代碼]&"/"&[c.代碼] AS 組合代碼
FROM 學(xué)校 AS a, 學(xué)校 AS b, 學(xué)校 AS c
WHERE a.ID<b.ID and b.id<c.ID
union
SELECT [a.ID]&[b.ID]&[c.ID]&[d.ID] AS 組合ID, [a.學(xué)校]&";"&[a.代碼]&";"&[b.學(xué)校]&";"&[b.代碼]&";"&[c.學(xué)校]&";"&[c.代碼]&";"&[d.學(xué)校]&";"&[d.代碼] AS 組合學(xué)校, [a.代碼]&"/"&[b.代碼]&"/"&[c.代碼]&"/"&[c.代碼] AS 組合代碼
FROM 學(xué)校 AS a, 學(xué)校 AS b, 學(xué)校 AS c, 學(xué)校 AS d
WHERE a.ID<b.ID and b.id<c.ID and c.id<d.ID)  AS [%$##@_Alias]
ORDER BY cint([組合ID]);
4#
 樓主| 發(fā)表于 2012-6-16 13:05:37 | 只看該作者
Henry D. Sy 發(fā)表于 2012-6-16 11:52
描述不清,表1應(yīng)該是不存在的,只是你想要的結(jié)果對嗎?

表1存在,更新后的數(shù)據(jù)保存在表1.謝謝!
5#
 樓主| 發(fā)表于 2012-6-16 13:11:10 | 只看該作者
anthonywang9 發(fā)表于 2012-6-16 12:38
試試這個
SELECT *
FROM

太棒了,謝謝!
6#
 樓主| 發(fā)表于 2012-6-16 13:46:12 | 只看該作者
anthonywang9 發(fā)表于 2012-6-16 12:38
試試這個
SELECT *
FROM

謝謝anthonywang9 :我試了一下,可用。但只適用最多4條記錄,學(xué)校表內(nèi)記錄數(shù)大于4時,查詢生成的數(shù)據(jù)不全(比如5條記錄時,組合ID就缺少12345,6條記錄時出錯:溢出)
7#
發(fā)表于 2012-6-16 15:14:10 | 只看該作者
額,我以為你的學(xué)校校區(qū)“東南西北”完了啊~~
如果你的源表【學(xué)!坑涗洈(shù)(r)是可變的話,那么就存在r個表間自連接,這種情況的話最好用VBA寫吧,單純的SQL語句可能不能寫出實現(xiàn)這樣的功能。
8#
 樓主| 發(fā)表于 2012-6-16 21:14:59 | 只看該作者
anthonywang9 發(fā)表于 2012-6-16 15:14
額,我以為你的學(xué)校校區(qū)“東南西北”完了啊~~
如果你的源表【學(xué)校】記錄數(shù)(r)是可變的話,那么就存在r個 ...

請教 anthonywang9: VBA該如何寫? 謝謝!
9#
發(fā)表于 2012-6-17 09:35:28 | 只看該作者
好像沒有規(guī)律,如果沒有規(guī)律那只能手工輸入記錄了。{:soso_e110:}
看了半天也看不出具體規(guī)律。
比如看不到134組合!
10#
發(fā)表于 2012-6-17 21:53:56 | 只看該作者
本帖最后由 anthonywang9 于 2012-6-17 21:57 編輯

Sub a()
Dim i As Integer: Dim m%
Dim Tsql As String: Dim sql() As String
i = DCount("ID", "學(xué)校")
ReDim sql(1 To i)
For m = 1 To i
sql(m) = "select " + QuerySub1(m) + "," + QuerySub2(m) + "," + QuerySub3(m) + QuerySub4(m) + QuerySub5(m)
Tsql = Tsql + " union " + sql(m)
Next m
Tsql = "selcet * from (" + Right(Tsql, Len(Tsql) - 6) + ") order by cint([組合ID])"
End Sub

Function QuerySub1(count As Integer) As String
Dim i%
For i = 1 To count
QuerySub1 = QuerySub1 + "&[a" & i & ".ID]"
Next i
QuerySub1 = Right(QuerySub1, Len(QuerySub1) - 1) + " as 組合ID"
End Function


Function QuerySub2(count As Integer) As String
Dim i%
For i = 1 To count
QuerySub2 = QuerySub2 + "&"";""&[a" & i & ".學(xué)校]&"";""&[a" & i & ".代碼]"
Next i
QuerySub2 = Right(QuerySub2, Len(QuerySub2) - 5) + " as 組合學(xué)校"
End Function


Function QuerySub3(count As Integer) As String
Dim i%
For i = 1 To count
QuerySub3 = QuerySub3 + "&""/""&[a" & i & ".代碼]"
Next i
QuerySub3 = Right(QuerySub3, Len(QuerySub3) - 5) + " as 組合代碼"
End Function


Function QuerySub4(count As Integer) As String
Dim i%
For i = 1 To count
QuerySub4 = QuerySub4 + ",學(xué)校 as a" & i
Next i
QuerySub4 = " from " + Right(QuerySub4, Len(QuerySub4) - 1)
End Function


Function QuerySub5(count As Integer) As String
Dim i%
If count = 1 Then
QuerySub5 = ""
Else
For i = 1 To count - 1
QuerySub5 = QuerySub5 + " and a" & i & ".ID<a" & (i + 1) & ".ID"
Next i
QuerySub5 = " where " + Right(QuerySub5, Len(QuerySub5) - 4)
End If
End Function

Tsql是最終的查詢語句,完全的sql語句拼接策略。由于Tsql長度過長,我的access無法支持調(diào)試。其中對于每一個m值的sql(m)我已經(jīng)調(diào)試過,沒有問題。
你可以建立i = DCount("ID", "學(xué)校")個中間查詢,其中QueryDef(i)=sql(i),然后再使用union方法。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

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

GMT+8, 2024-10-23 08:23 , Processed in 0.178417 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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