2008年7月3日 星期四

由SQL取出名次排序之下法

如果SQL想在取出之資料前面多一欗顯示名次,該怎們下SQL呢?
雖然也可以在報表時用變數處理
但,SQL下的好,程式寫得少
以下提供SQL下法範例:


SELECT
(SELECT COUNT(GONO1) FROM FDRCALSI S1 LEFT JOIN FDRCALDI D1 ON S1.SHNO = D1.SHNO
WHERE (D1.SHNO + D1.GONO) <= (D.SHNO + D.GONO)
AND S1.EMPNO IS NOT NULL) AS ORDERS
, S.EMPNO,S.SDATE,S.SHNO,D.SPNO,D.GONO1,D.GONO2
,D.GONO3,D.RAMT,D.SAMT
FROM FDRCALSI S
LEFT JOIN FDRCALDI D ON S.SHNO=D.SHNO
WHERE S.EMPNO IS NOT NULL
ORDER BY D.SHNO, D.GONO

主要關鍵是在:WHERE (D1.SHNO + D1.GONO) <= (D.SHNO + D.GONO)這一個地方
利用巢狀查詢Count筆數,Count的基準是D1<=D的筆數而在Count時利用唯一值(D1.SHNO + D1.GONO)去比對,還有唯一值須與ORDER有關聯,也就是說須依唯一值進行排序,否則,排出來之序號不會由小而大排序,
也因此最後須ORDER BY D.SHNO, D.GONO

沒有留言: