  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		sthuang66
 
 
  註冊時間: 2014-04-27 文章: 178
 
  第 1 樓
  | 
		
			
				 發表於: 星期四 三月 12, 2015 8:43 am    文章主題: 有沒有更快幫數據加排名的方法? | 
				     | 
			 
			
				
  | 
			 
			
				表一的大概內容如下
 
ID    No
 
A     100
 
H     199
 
B     211
 
C     100
 
Z     92
 
------------------------------------ 
 
ID是唯一不會重覆!想把這些人作降冪排列後並添加名次!若是數值相同就給同名次!我是參酌1keydata有寫好程序!只是這個方法號像很耗資源!資料筆數不能太大!3000筆以上會算很久好像當掉
 
我的方法如下
 
SELECT a1.ID, a1.No, COUNT(a2.no) Rank FROM 表一 a1, 表一 a2;
 
WHERE a1.No < a2.No OR (a1.no=a2.no AND a1.ID = a2.ID) GROUP BY a1.ID, a1.no ORDER BY a1.no DESC, a1.ID DESC into table A
 
-----------------------------------------------------------------
 
因為我大部分只要在VFP下算5000筆以下資料去加排名,以上方法我在我筆電單機上運算還ok!不過昨天在公司用client端去運算時就會當掉!出現一個訊息memory什麼not enough!有點忘掉那個提示訊息!
 
所以請教各位高手有更好辦法嗎??或是有什麼免費軟體可以不太耗資源又很快可把排名加到表一!感謝大家賜教!!!!_ | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		sthuang66
 
 
  註冊時間: 2014-04-27 文章: 178
 
  第 2 樓
  | 
		
			
				 發表於: 星期四 三月 12, 2015 9:32 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				目前我有查到用EXCEL的RANK函數是可以!那就要把DBF先轉出去xls再去操作
 
----------------------------------------
 
=RANK(B2,$B$2:$B$6)
 
----------------------------------------
 
用VFP去佳名次好處是不用去管最後一筆的紀錄數!程式執行就加到完!只是有我講的缺點,用EXCEL則每次要把最後一筆的數字填入,例如我例子是5件就要填入$b$6!
 
不過選完把它貼上時瞬間EXCEL就把名次算出放入 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 3 樓
  | 
		
			
				 發表於: 星期四 三月 12, 2015 10:12 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				用傳統的 SCAN ..... ENDSCAN 去填名次,也很省記憶體,速度也很快.  XD
 
 
select 命令隱藏很多耗資源的操作,
 
看起來命令簡單,
 
實際上執行可不簡單 _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		bx1166
 
 
  註冊時間: 2011-12-06 文章: 273
 
  第 4 樓
  | 
		
			
				 發表於: 星期四 三月 12, 2015 10:31 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				五千筆的排序是很小很小的小事, now enough memory,實在很諷刺,你確定是用vfp?
 
以No排序再從頭塡入排名,大概沒有幾行程式. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		sthuang66
 
 
  註冊時間: 2014-04-27 文章: 178
 
  第 5 樓
  | 
		
			
				 發表於: 星期五 三月 13, 2015 1:06 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				謝謝大家的回答!
 
我再試試用syntech的方法來看看!
 
我是用VFP8沒錯!只是資料庫在遠端!遠端主機好像有人倒大筆運算所以可能資源被佔了!因為撈資料回單機需要上面主管授權稍微麻煩我把資料弄回單機算就不會啦!,只是用我寫的程序還是不夠快才會請教各位!
 
感謝大家幫助!我是半路出家新手!
 
我有Google一下發現論壇http://vfp.sunyear.com.tw/viewtopic.php?t=3191有討論過 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		sthuang66
 
 
  註冊時間: 2014-04-27 文章: 178
 
  第 6 樓
  | 
		
			
				 發表於: 星期五 三月 13, 2015 8:23 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				我參照上面網址討論內容所寫, 有下列更大家參考!比我開始寫的方式快很多
 
select *,(select count(no) from 表一 where no> a.no)+1 as rank from 表一  a order by rank into table 表二
 
 
表一的大概內容如下
 
ID    No
 
A     100
 
H     199
 
B     211
 
C     100
 
Z     092
 
 
操作後可以成表二
 
ID    NO     rank
 
B     211    1
 
H     199    2
 
A     100    3
 
C     100    3
 
Z     092    5
 
 
我原先方法是如下(運算速度較慢)
 
SELECT a1.ID, a1.No, COUNT(a2.no) Rank FROM 表一 a1, 表一 a2; 
 
WHERE a1.No < a2.No OR (a1.no=a2.no AND a1.ID = a2.ID) GROUP BY a1.ID, a1.no ORDER BY a1.no DESC, a1.ID DESC into table 表二
  sthuang66 在 星期六 三月 14, 2015 6:24 pm 作了第 2 次修改 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		lygcw9603
 
 
  註冊時間: 2011-12-25 文章: 130
 
  第 7 樓
  | 
		
			
				 發表於: 星期六 三月 14, 2015 11:06 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				排序规则是什么
 
上传数据表 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		sthuang66
 
 
  註冊時間: 2014-04-27 文章: 178
 
  第 8 樓
  | 
		
			
				 發表於: 星期一 三月 16, 2015 6:54 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				我利用上面方法在VFP9上去加名次是OK!很快
 
 
但是公司VFP是8.0卻跳出錯誤訊息!不知道有沒有高見可以解決
 
非常感謝
 
我本來用http://www.1keydata.com/tw/sql/sql-rank.html  上面方法
 
---------------------------------------------------------------------------------
 
SELECT a1.Name, a1.Sales, COUNT(a2.Sales) Sales_Rank 
 
FROM Total_Sales a1, Total_Sales a2 
 
WHERE a1.Sales <= a2.Sales OR (a1.Sales=a2.Sales AND a1.Name = a2.Name) 
 
GROUP BY a1.Name, a1.Sales 
 
ORDER BY a1.Sales DESC, a1.Name DESC;
 
--------------------------------------------------------------------------------
 
這個在vfp8可以但是太佔資源有時會當 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |