想請各位先進指導我一下,假如我的Table中的某一欄位(t1)資料如下,
t1
-------
1080
2116
7628
1080HR
2116
1080
7630
.
.
.
如果我把t1的資料撈出來之後,希望可以計算不同的值出現的次數,
以上面的t1為例,我希望可以計算1080有幾個?2116有幾個?其他的有幾個?請問有什麼方法嗎?我想到的是以select case的方式,
select case !t1
case "1080"
i(0)=i(0)+1
case "2116"
i(1)=i(1)+1
.
.
.
end select
可是如果以這種方式的話,那等於我必須把所有的值寫死在程式中,這樣似乎不太妥當而且也不太方便,因為可能得不斷的因為新增加的值去更改程式,所以想請各位先進前輩指導我一下是不是有什麼比較好的方法,先謝謝您們囉~
t1
-------
1080
2116
7628
1080HR
2116
1080
7630
.
.
.
如果我把t1的資料撈出來之後,希望可以計算不同的值出現的次數,
以上面的t1為例,我希望可以計算1080有幾個?2116有幾個?其他的有幾個?請問有什麼方法嗎?我想到的是以select case的方式,
select case !t1
case "1080"
i(0)=i(0)+1
case "2116"
i(1)=i(1)+1
.
.
.
end select
可是如果以這種方式的話,那等於我必須把所有的值寫死在程式中,這樣似乎不太妥當而且也不太方便,因為可能得不斷的因為新增加的值去更改程式,所以想請各位先進前輩指導我一下是不是有什麼比較好的方法,先謝謝您們囉~
文章標籤
全站熱搜

如果你是用MS SQL或Access(Oracle我不知道是不是也是這樣) 可以利用Group by的方法下SQL Command如下 SELECT t1, count(t1) from 資料表名稱 group by t1 這樣就可以取出每一個號碼的次數了
謝謝Rock您的指點... 對不起,也許是我沒有把全部的情況說明,所以我再補充一下... 其實我的Table中t1欄位的資料完整的樣式應該是如下: t1 ------------- 1080-s-1.0 2116-g-0.5 7628-s-0.5 1080HR 2116-s-1.0 1080-h-0.2 7630-s-1.0 1080HR . . . 如果是以Rock兄所提的方式,那便會造成1080-s-1.0與1080-h-0.2是不相同的,但是我想做到的是(以上為例) 1080有2筆 1080HR有2筆 2116有2筆 7628與7630為各1筆 我最初的做法是先將t1欄位的值做切割,然後再去做計次... With rs If .RecordCount > 0 Then .MoveFirst Do While Not .EOF str() = Split(Trim(!t1), "-") Select Case Trim(str(0)) Case "1080" i(0) = i(0) + 1 case "1080HR" i(1) = i(1) + 1 ... End Select .MoveNext Loop End If End With 也就是以"-"去做切割,可是如果以這種方式的話,那等於我必須把所有的值寫死在程式中,這樣似乎不太妥當而且也不太方便,因為可能得不斷的因為新增加的值去更改程式,因為我寫程式的經歷還很淺,想不出什麼更好的方法,所以想請各位先進前輩指導我一下是不是有什麼比較好的方法,先謝謝您們囉~
一樣是用SQL COMMAND 你再試一下應該沒你想的那麼難 SELECT LEFT(t1, 4) AS Expr1, COUNT(*) AS 'Count' FROM tdata GROUP BY LEFT(t1, 4)
謝謝brl... 可是您所用的left(t1,4),我也想過,但是它會把1080-s-1.0和1080HR計為同一筆,這樣的話就與我所想做成的不一樣了,所以...
嗯嗯試著先將SQL作排序, 然後將你覺得異常的問題作 for 迴圈 開陣列計數因為排過序了 所以可試試IF內用前後兩筆資列來對你認為的差異, 若又有特例的話,就改用switch case來作 這邊和你不同的地方在我是用前後兩筆來判斷是否在同一個Group中, 因為SQL先作完排序。因該比較好用這方面判斷。 for i=1 to max if ()<>() then'這邊用前後兩筆值來決定是否新增一個COUNT陣列 i=i+1 redim presve count[i+1] count[i+1]=1 else count[i]=count[i]+1 end if rs.MoveNext next i ============================================ 或是用decode在ORACLE中這是拿來作if else的判斷的, 在將你上面的sql語法修飾,可能可用, decode 和 substr 和concat 在重組字串在來作group count select count(substr(decode(substr(saccountno,3,1),'-',concat('a', saccountno),'b'),1,3)) from test_1 group by substr(decode(substr(saccountno,3,1),'-',concat('a', saccountno),'b'),1,3) 但若特例太多的話, 那就~~~~~~~~~~~~~ select case吧><