2014-10-29 94 views
0

嗨什麼,我需要做的是創造,輸出的第一個字符的總和一個字段的表中的SELECT語句,因此輸出會看起來像選擇第一個字母字符的occurances的總和

A,12 
B,0 
C,20 
D,14 
E,0 
ect... 

的表稱爲接觸,在上面有12次出現的人,他們的名字開頭字母A

我希望我已經解釋了這種正確

+0

假設ASCII字符集? – 2014-10-29 09:11:40

回答

2

讓我們用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

+0

不幸的是,這隻適用於ASCII字符集。 – 2014-10-29 09:12:46

1

生成使用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 

SQLFiddle

署名:我的生成信件的技術使用的Lalit's answer元素。

+0

當這個給定的alpahabet沒有名字時,這個工作是否會起作用? 它不會在這些情況下打印0 – arunb2w 2014-10-29 06:20:04

+0

@ arunb2w,這將只顯示錶中存在的那些字母。如果你還想要其他字母,請檢查我的答案。 – 2014-10-29 08:10:17

+2

@lalit是的,我錯過了這一點。但是如果你將字母加入substr,你的答案可以更好地用連接和沒有聯合來完成。 – Bohemian 2014-10-29 09:27:46

相關問題