2008年1月21日星期一

利用SQL選取資料表中相同類型的前N筆資料

這是在最近IR Project碰到的問題

範例資料表 - 人事:
編號 人名 階級
1 王小明 主管
2 張小明 主管
3 李小明 主管
4 陳小明 主管
5 李安 員工
6 張安 員工
7 王安 員工
8 陳安 員工
9 平安 員工

我們希望選出主管和員工的前兩筆資料,也就是
編號 人名 階級
1 王小明 主管
2 張小明 主管
5 李安 員工
6 張安 員工

可以利用SQL LEFT OUTER JOIN Statement來達成
解答:
SELECT ta.編號, ta.人名, ta.階級
FROM 人事 AS ta
LEFT OUTER JOIN 人事 AS tb
ON ta.階級 = tb.階級 AND ta.編號 <= tb.編號
GROUP BY ta.階級, ta.編號, ta.人名
HAVING COUNT(1) < 2
ORDER BY ta.階級, ta.編號

0 意見: