嗨什麼,我需要做的是創造,輸出的第一個字符的總和一個字段的表中的SELECT語句,因此輸出會看起來像選擇第一個字母字符的occurances的總和
A,12
B,0
C,20
D,14
E,0
ect...
的表稱爲接觸,在上面有12次出現的人,他們的名字開頭字母A
我希望我已經解釋了這種正確
嗨什麼,我需要做的是創造,輸出的第一個字符的總和一個字段的表中的SELECT語句,因此輸出會看起來像選擇第一個字母字符的occurances的總和
A,12
B,0
C,20
D,14
E,0
ect...
的表稱爲接觸,在上面有12次出現的人,他們的名字開頭字母A
我希望我已經解釋了這種正確
讓我們用EMP表格例子來理解這一點。
SQL> with
2 letters
3 as
4 (select chr(ascii('A')+level-1) letter
5 from dual
6 connect by level <= 26
7 )
8 SELECT substr(ename, 1, 1) AS init_name,
9 count(*) cnt
10 FROM emp
11 WHERE substr(ename, 1, 1) IN (SELECT letter from letters)
12 GROUP BY substr(ename, 1, 1)
13 UNION
14 SELECT l.letter AS init_name,
15 0 cnt
16 FROM letters l
17 WHERE l.letter NOT IN (SELECT substr(ename, 1, 1) FROM emp)
18 ORDER BY init_name
19/
I CNT
- ----------
A 2
B 1
C 1
D 0
E 0
F 1
G 0
H 0
I 0
J 2
K 1
L 0
M 2
N 0
O 0
P 0
Q 0
R 0
S 2
T 1
U 0
V 0
W 1
X 0
Y 0
Z 0
26 rows selected.
SQL>
所以,它給名字中的每個字母的count
,併爲這不會在第一形同虛設其他字母,計數爲0
。
不幸的是,這隻適用於ASCII字符集。 – 2014-10-29 09:12:46
生成使用connect
隨後的26個字母左加入到第一名字的字母並計數:
select letter, count(name) count
from (select chr(ascii('A')+level-1) letter from dual connect by level < 27) l
left join emp on substr(name, 1, 1) = letter
group by letter order by 1
署名:我的生成信件的技術使用的Lalit's answer元素。
假設ASCII字符集? – 2014-10-29 09:11:40