2009. 11. 19. 15:40
MSSQL
[edit]
1 시나리오 #
다음과 같은 테이블 있다.
고객 yasicom은 bill 테이블과 같이 캐시가 충전되어 있다. 그리고 bill_policy테이블에는 어떤 요금부터 차감을 할 것인지에 대한 계산의 우선순위가 매겨져 있다. 또한 충전한 요금유형이 여러 개라면 먼저 충전된 캐시가 차감된다. 즉, 선입선출이다. 그러므로 다음과 같은 우선순위를 갖는다.
만약 17,000원짜리 아이템을 구매하였다면, 다음과 같이 차감되어야 한다.
- 1번째 Row: 500 - 17000 = -16500
- 2번째 Row: 2000 - 16500 = -14500
- 3번째 Row: 500 - 14500 = -14000
- 4번째 Row: 10000 - 14000 = -4000
- 5번째 Row: 5000 - 4000 = 1000
[edit]
2 MSSQL 2005의 구현방법 #
2000버전의 MSSQL Server는 이러한 구현을 하려면 매우 우울했었다. 많은 방법을 생각해보았지만 커서만한 솔루션이 없었으니까 말이다. 어찌되었던 2005 버전에서는 CTE를 사용하는 재귀쿼리를 이용하여 선입선출 및 차감 Row단위의 접근이 어느 정도 가능해졌다. 뭐 집합적으로 가능해졌다고 할 수도 있겠으나 집합적이다 라고 말하기도 조금 뭣하다. 어찌되었건 다음과 같이 구현해 보았다.
* IE에서 소스 복사시 줄바꿈 안됨. MS-Word 등에 붙여 넣으세요. 줄바꿈 되는 브라우저: Chrome, Opera, Safari
출 처 : http://databaser.net/moniwiki/wiki.php/%EB%B9%8C%EB%A7%81%EC%9D%98%EC%B0%A8%EA%B0%90%EB%B0%8F%EC%84%A0%EC%9E%85%EC%84%A0%EC%B6%9C%EB%B0%A9%EB%B2%95
출 처 : http://databaser.net/moniwiki/wiki.php/%EB%B9%8C%EB%A7%81%EC%9D%98%EC%B0%A8%EA%B0%90%EB%B0%8F%EC%84%A0%EC%9E%85%EC%84%A0%EC%B6%9C%EB%B0%A9%EB%B2%95