database

Oracle ~> MsSQL 변환작업 두번째

우주정복☆ 2014. 6. 26. 15:11

MsSQL에서의 페이징

row_number() 함수를 사용해서 구현했다.

SELECT 

userid, userName, apprid, approvalName

FROM (
  SELECT ROW_NUMBER() OVER(ORDER BY userid(PK) DESC ) rowsNum, 
  a.userid AS userid, a.userName AS userName, b.apprid AS apprid, b.app  rovalname AS approvalName 
  FROM users a, approval b
  WHERE a.userid = b.apprid
) AS paging

WHERE rowsNum BETWEEN 1 AND 10
ORDER BY userid DESC

msSql에서는 limit 속성을 사용할수 없기 때문에 이런형태의 페이징을 구현했다. 

OVER() 함수에는 ORDER BY 각 꼭 들어가야 하며 기본키가 정렬값이어야 한단다.


GROUP_CONCAT을 STUFF()로 변환
SELECT
b.apprid, STUFF(
(SELECT ', ' + sb.appruid+'/'+su.nname
FROM appr_person sb, users su
WHERE sb.apprid = b.apprid and (sb.apprflag = 'd' AND sb.appruid = su.userid)
FOR XML PATH('')), 1, 2 ,'' )
FROM appr_person b
WHERE b.apprflag = 'd'
GROUP BY b.apprid