database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 7305 게시물 읽기
No. 7305
매개변수 하나로 2개의 행 나누어 차감
작성자
MS보초(hs7771)
작성일
2024-05-16 20:01
조회수
81



하나의 매개변수 @DeductionCount 를 받아서

2개의 로우(무료,유료)를 차감하는 로직인데 좀더 나이스한 방법 없을까요??



테이블구조

USER_ID  

ITEM_ID

ITEM_COUNT

(PK USER_ID,ITEM_ID)

USER_ID   ITEM_ID  ITEM_COUNT

123            1         200

123            11         300


DECLARE @DeductionCount bigint= 400

        @USER_ID bigint = 123



    SELECT ITEM_ID

          ,ITEM_COUNT

          ,CASE WHEN  ITEM_ID = 1  THEN IIF(@DecreaseValue <= (LEAD(ITEM_COUNT,1,0) OVER(ORDER BY ITEM_ID) ),0, @DecreaseValue-(LEAD(ITEM_COUNT,1,0) OVER(ORDER BY ITEM_ID))) 

                WHEN  ITEM_ID = 11 THEN IIF(@DecreaseValue <= ITEM_COUNT ,@DecreaseValue ,ITEM_COUNT)  

                ELSE 0 

            END AS CunsumeITEM_COUNT

    FROM    (

                SELECT ITEM_ID

                      ,ITEM_COUNT

                      ,IIF(ITEM_ID=1,ITEM_COUNT,0)  AS FreeRuby

                      ,IIF(ITEM_ID=11,ITEM_COUNT,0) AS PayRuby

                FROM    dbo.PlayerITEM WITH(NOLOCK)

                WHERE    USER_ID = @USER_ID

                AND        ITEM_ID IN (1, 11)

            ) AS A

    ORDER BY ITEM_ID ASC

 

이 글에 대한 댓글이 총 2건 있습니다.
WITH playeritem AS
(
SELECT 123 user_id, 1 item_id, 200 item_count
UNION ALL SELECT 123, 11, 300
)
SELECT item_id, item_count
     , CASE WHEN v < s - c THEN 0
            WHEN v >= s    THEN c
            ELSE v - s + c
        END CunsumeITEM_COUNT
  FROM (SELECT item_id, item_count
             , item_count c
             , SUM(item_count) OVER(ORDER BY item_id DESC) s
             , 400 v
          FROM playeritem
         WHERE user_id = 123
           AND item_id IN (1, 11)
        ) a
 ORDER BY item_id
;
마농(manon94)님이 2024-05-28 13:16에 작성한 댓글입니다.

sum over 절을 이용해서 리팩토링하다니..

마농님의 쿼리는 참 아름답군요  감사합니다

MS보초(hs7771)님이 2024-05-28 22:31에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7307bom 구성 상위 모품목을 가지고 오고싶습니다. [2]
박인규
2024-05-30
65
7306해당월의일자별장치체크 자료를 추출하고자 합니다. [8]
빨간운동화
2024-05-24
102
7305매개변수 하나로 2개의 행 나누어 차감 [2]
MS보초
2024-05-16
81
7304두 테이블 조회값을 한 쿼리 결과값으로 조합 문의 [2]
초개
2024-03-13
196
7303문자열 구분 [2]
초보
2024-01-05
253
7301텍스트 동적 조합 문의 [5]
초개
2023-12-06
277
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다