
위 구성으로 된 테이블이 있습니다.
전체 COUNT가 데이터 쌓임에 따라 누적이 되고 있는데
TYPE에 따라 별도로 누적값을 새로 쌓을려고 합니다.
아래와 같이 표현하려 해요
그런데 문제가, 가능한 서브쿼리를 통해서 해결해야 하는데, 도움을 요청드립니다.
서브쿼리로 많이 번거롭다면 다른 방법도 좋습니다.

ROWNUM 이 오라클의 로넘인가요? 아니면 컬럼명이 로넘인가요?
1. 컬럼명이 아닌 오리클의 로넘이라면?
- 로넘 말고 정렬기준항목이 제시되어야 합니다.
2. 오리클의 로넘이 아닌 컬럼명이라면?
- DB 종류나 버전 등을 알려주세요.
mssql이고 rownnum은
실제로 테이블에 있는 데이터는 아니고
SELECT ROW_NUMBER() 을 통해 만든 컬럼입니다.
정렬 기준은 뒤에 create_time이 있는데,
order buy create_time desc 로 역순으로 정렬 중입니다.
혹시 누적카운트 항목도 가공을 통해 만들어진 항목은 아닌지?
가공해서 만드려는거 최종산출물 말고
그전에 항목 count 도 혹시 가공해서 만들어진 중간산출물이 아닌지를 묻는 것입니다.
(원래 항목이다 VS 가공한 항목이다)
만약 가공한 항목이라면? 구문을 보여주세요.
지금 현 상황에 대한 쿼리 올리도록 하겠습니다.
SELECT
ROW_NUMBER() OVER(ORDER BY CREATE_TIME DESC) AS ROWNUM,
TYPE,
COUNT,
CREATE_TIME
FROM TEST_TABLE
위와 같은 구조입니다.
COUNT는 테이블에 있는 데이터입니다.
rownum, count, type 등 시스템 예약어를 명칭으로 사용하는 것은 좋지 않습니다.
ORDER BY create_time DESC 맞나요? ASC 를 해야 위의 rownum 이 나올 듯 한데요?
네 맞아요 가공해서 만드려는 항목이라
서브쿼리로 처리하려고 해요
그르니까,, 위에 데이터중에
rownum는 sql함수로 가공해서 만들어진거구요
type 분류별로 sum_type_count를 가공해서 만드려고 해요
이유는 저 쿼리를 지금 sql function에서 사용하려고 해서 테이블컬럼으로 따로 만들지 않습니다..
WITH test_table AS
(
SELECT 1 create_time, 'CCC' typ, 100 cnt
UNION ALL SELECT 2, 'CCC', 200
UNION ALL SELECT 3, 'CCC', 300
UNION ALL SELECT 4, 'CCC', 400
UNION ALL SELECT 5, 'BBB', 500
UNION ALL SELECT 6, 'BBB', 600
UNION ALL SELECT 7, 'BBB', 700
UNION ALL SELECT 8, 'AAA', 800
UNION ALL SELECT 9, 'AAA', 900
)
SELECT rn
, typ, cnt, create_time
, SUM(cnt_o) OVER(PARTITION BY typ ORDER BY create_time) cnt_typ
FROM (SELECT ROW_NUMBER() OVER(ORDER BY create_time) rn
, typ, cnt, create_time
, cnt - LAG(cnt, 1, 0) OVER(ORDER BY create_time) cnt_o
FROM test_table
) a
ORDER BY create_time DESC
;