 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
sthuang66
註冊時間: 2014-04-27 文章: 178
第 1 樓
|
發表於: 星期三 九月 16, 2015 9:05 am 文章主題: 請教各位高手下面3種方法去加名次出來答案是一模一樣但是檔案大小運算速度卻有差別 |
|
|
表A有下列数据:
name no
aa 99
bb 56
cc 56
dd 77
ee 78
ff 76
gg 78
ff 50
-------------------------------------- 名次生成方式 , no重複時保留名次空缺
Name no rank
--------------- ----------------- -----------
aa 99.00 1
ee 78.00 2
gg 78.00 2
dd 77.00 4
ff 76.00 5
bb 56.00 6
cc 56.00 6
ff 50.00 8
A方法
SELECT * FROM A ORDER BY no DESC INTO TABLE C
ALTER table C ADD rank n(4)
UPDATE C SET rank=(select COUNT(a.name)+1 from C as a WHERE a.no>C.no)
B.方法
Select * From A Order By NO Desc Into Cursor rr
Select *,Recno() As rank From rr Into Cursor qq Readwrite
nNO=0
For i=1 To Reccount()
Go i
If NO=nNO
Skip -1
nRank=Rank
Go i
Replace Rank With nRank
ENDIF
nNO=NO
Endfor
COPY TO abc
C.方法
SELECT *,(SELECT COUNT(no) FROM b WHERE no> A.no)+1 AS RANK FROM b A ORDER BY RANK INTO TABLE DDD
----------------------------------------------
以上表A是舉例!實際上排名次有五千多筆
上面方法算出內容是完全相同
檔案大小:C>A>B
運算速度:B最快,A和C相近
程式精簡度:C>A>B
運算速度不同是可以理解因為以上三種方法邏輯不一樣
但是檔案大小不同就難理解!新生成名次欄位相同內容也一樣!
煩請板上高手解惑開示! |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 2 樓
|
發表於: 星期三 九月 16, 2015 9:54 am 文章主題: Re: 請教各位高手下面3種方法去加名次出來答案是一模一樣但是檔案大小運算速度卻有差別 |
|
|
sthuang66 寫到: |
但是檔案大小不同就難理解!新生成名次欄位相同內容也一樣!
|
您把三個方案出來的 table
modi stru 看看,
結構是否完全一樣? |
|
回頂端 |
|
 |
sthuang66
註冊時間: 2014-04-27 文章: 178
第 3 樓
|
發表於: 星期三 九月 16, 2015 4:03 pm 文章主題: |
|
|
感謝ckp6250指教
果然是structure 問題!應該是用select或是update 等SQL語法自動帶出來的新欄位RANK 其中Nunber比較多位(印象中跟第一個欄位數有關)所以檔案較大
B方法直接指定N(4)所以最小!當大家用modi stru 後檔案大小就一致了 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|