• 3

請教ACCESS達人~

其實不是901特別
我只是要做到以B的序列來分組
如題目若變為這樣(張三是同一人)


要出現這樣的結果



因資料量很大
希望可以寫一個SQL是通用的
若用between我並無法知道張三正確的區間
還有其他方法嗎?

mashimaro168 wrote:
其實不是901特別...(恕刪)


方法總是有的,但我不清楚你要作啥,請給個比較明確的說法。
其實B欄是A欄的左邊加序號
我的A欄從00到99
B欄就是A欄左邊加1 2 3 4 5 6 7 8 9
我要B欄的順序 以C欄的連續人名做群組(找起迄點)
可跑出最後的表

原本是用MIN及MAX找起迄
但是A欄00群組中,若同一人有中斷我就會誤抓到最後一個值為迄值就錯了
照您最後的描述,A欄也的變化也會影響C欄的群組的!!
且不論您的想法要如何實現,對於問題的處理,您已經提供您自己認定的方式來找方案,
但是往往跳出這個方式,或許會有更佳的解決方案!!
所以建議您可以提供您實際的應用,到底是為何要做這樣的樣式(因為看數據,實在看不懂要做甚麼),
說不定會有其他更好的方式來統計顯現您的需求!!
看說明:樓主只是要A或C欄連續區間的B欄極端大小値,判斷不需要同時用到A和C欄,
技巧在不要排序,依序抓出A或C欄連續區間的B欄極端大小値,在access中使用查詢的形式,就一定會用到VBA來判斷.
使用sql或vba的程式碼形式來處理也是ok的,但我會使用vb或c#來處理,會比在aceess中使用sql/vba指令來的單純.
樓主使用了群組或是排序功能就注定會失敗,因為順序已經亂了,如果一定要這樣用,就先依序抓出A或C欄連續區間,給予不同的鍵值.
有興趣的的可以自行試試看.

另外因為這是外來的匯入資料,如果可以在來源中先加入不同連續區間的欄位値就可以了.理想的data如下:

資料隨便打,重點在事先在資料來源中加入A欄位.
大大您好
我有一個想法,就是加一個D欄,目的是用來將不連續的人名區分為不同群組,因為前面幾個欄位都達不到這個效果,就很難做到您說的結果
如下圖


查詢時將D欄加進來


結果如下


這個方法有一個地方要克服,我還在想,就是怎麼產生D欄的數字,不知道ACCESS裡面有沒有甚麼函數可以產生,或是要用VBA來寫,VBA我就不行了 = =
再不然就是將C欄貼到EXCEL中,寫函數得到D欄的數字再貼回ACCESS,我覺得這樣比較簡單,但是就多了一個步驟,而且如果你的資料超過100萬筆的話可能就沒辦法這樣做(因為前面你說你的資料量很大...冏)

提供給您參考一下,歡迎再討論~~
請問Access如何使用C#?用C#作成一個OCX讓Access參照?拜託不要講神話。
你的需求是不可能辦到的,用VBA可以解決「目前」的問題沒錯,但如果往中間插一筆資料怎辦?比如你的原始資料表一開始連續三筆張三,如果往中間插一筆變成連續四筆張三,就連VBA也沒輒,除非把資料表來源換成連結Excel試算表。因為資料庫一概是往後添加資料,不像Excel可以從中間插入資料。除非你很確定資料永遠不會發生「插入」異動,才可以用VBA解決。

純用SQL是無法滿足你需求的,對SQL來說沒有「前一筆」、「這一筆」、「下一筆」這回事,所以無法知道「連續幾筆資料相同」。

用VBA也不難寫,但得添加欄位或讓結果輸出到另一個資料表,以輸出到新資料表來說,大致上這樣寫:(引用DAO物件)

dim 原始資料表,輸出資料表 as recordset
dim 區間最大值,區間最小值,上一筆人名 as string
set 原始資料表=currentdb.openrecordset("來源資料表",dbopensnapshot)
set 輸出資料表=currentdb.openrecordset("目的資料表",dbopendynaset)
原始資料表.movefirst
上一筆人名=原始資料表.c
區間最大值=原始資料表.b
區間最小值=原始資料表.b
do untile 原始資料表.eof
on error resume next
原始資料表.movenext
if 原始資料表.c<>上一筆人名 then
輸出資料表.addnew
輸出資料表.c=上一筆人名
輸出資料表.b=區間最小值 & "~" & "區間最大值
輸出資料表.update
上一筆人名=原始資料表.c
區間最大值=原始資料表.b
區間最小值=原始資料表.b
end if
上一筆人名=原始資料表.c
if 區間最大值<原始資料表.b then 區間最大值=原始資料表.b
if 區間最小值>原始資料表.b then 區間最小值=原始資料表.b
loop
msgbox "整理好了^_^"

隨手寫的,沒測試過,理論上是這樣寫,有臭蟲恕不負責。
大大誤解我的意思,我是指用MS VS的VB或C#連接樓主的ACCESS資料再來處理,當然你用其他可處理ACCESS資料庫的程式語言也是可以的.
東西都有擅長和不擅長的部分,依照目前資料的情況,樓主這部份因為ACCESS內建函數無法處理,必須使用VBA來協助判斷分區間,與其使用VBA硬搞,不如捨棄ACCESS,使用其他功能較完善的程式語言來處理.
lordtaco wrote:
請問Access如何...(恕刪)
V~~B~~A
唉~
如果真只有這條路
就來寫吧
只是我通常都會寫到卡住
先來試試前面那位大大的建議
  • 3
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?