2015-06-18 29 views
2

如果我運行下面的查詢,我得到預期的結果:分組通過數字或首字母

SELECT upper(substr(columnname, 1, 1)) 
FROM table 
GROUP BY upper(substr(columnname, 1, 1)). 

我爲每首字母組從A到Z和0到9。但我想什麼我得到的是像「0-9」,「AC」,「DF」等組合。我不知道如何分組。有誰可以給​​我一個提示如何開始請嗎?

+0

這些「超級羣體」是如何確定的?它們是靜態的並且事先已知,或者它們以某種方式由數據驅動? – Stan

回答

0

一個想法可能是創建一個用戶定義的函數,它接收一個字母並返回一個字符串與該字母所屬的組。

如果名稱功能「getGroupFor」和它的作品,因此:

getGroupFor('A') returns 'A-C' 
getGroupFor('B') returns 'A-C' 
... (and so on) 

然後你就可以通過該函數的輸出改變你的選擇組。

SELECT getGroupFor(upper(substr(columnname, 1, 1))) FROM table GROUP BY getGroupFor(upper(substr(columnname, 1, 1))) 

您可以找到如何看待這個問題的其他創造SQLLite用戶定義的函數:

How to create custom functions in SQLite

另一種方法是創建一個表,可以映射字母不超過letter組,然後通過「letter-group」列而不是單個字母來加入表和組。