반응형
각 행을 다른 열에 SUM()하는 방법
이 테이블이 있습니다.
| ID_prim | ID (FKey) | Date | Moved Items |
|:-----------|:------------|-------------:|:------------:|
| 1003 | 12_1 | nov 2013 | 2 |
| 1003 | 12_2 | okt 2013 | 3 |
| 1003 | 12_3 | dec 2014 | 5 |
| 1003 | 12_4 | feb 2015 | 10 |
| 1003 | 12_5 | apr 2012 | 1 |
| 1003 | 12_11 | jan 2011 | 5 |
나는 다음과 같이 같은 표를 쿼리하고 싶습니다.
- 날짜를 설명별로 정렬합니다.
- 각 '이동된 항목'을 행당 합
- 합계가 원하는 금액에 도달하면 쿼리를 중지
- 내가 원하는 금액은 MAX '합계'부터 시작해서 내가 원하는 금액을 뺀 금액(16)
그렇게
| ID_prim | ID (FKey) | Date | Moved Items | Summed Total |
|:-----------|:------------|-------------:|:------------:|:------------:|
| 1003 | 12_4 | feb 2015 | 10 | 26
| 1003 | 12_3 | dec 2014 | 5 | 16
| 1003 | 12_3 | nov 2013 | 2 | 11 <
| 1003 | 12_4 | okt 2013 | 3 | 9
| 1003 | 12_5 | apr 2012 | 1 | 6
| 1003 | 12_11 | jan 2011 | 5 | 5
"Summed Total" (26) - 16 = 10에 도달하면 쿼리를 중지하고 싶습니다.그래서 10부터 모두 보여주세요 > 데이터베이스에 이 값들만 있을 것입니다.
| ID_prim | ID (FKey) | Date | Moved Items | Summed Total |
|:-----------|:------------|-------------:|:------------:|:------------:|
| 1003 | 12_4 | feb 2015 | 10 | 26
| 1003 | 12_3 | dec 2014 | 5 | 16
| 1003 | 12_3 | nov 2013 | 2 | 11
제가 가지고 있는 것은 다음과 같습니다.
SELECT
T1.ID_prim, T1.ID as ID (FKey), T1.Moved_Items as Moved Items, t1.Date, SUM(T2.MOVEMENTQTY) AS Summed Total
FROM Table1 T1
INNER JOIN Table1 T2 ON T2.ID <= T1.ID
inner join table2 inout on T1.ID_prim = inout.ID_prim
AND T2.ID_prim = inout.ID_prim
AND T2.ID_prim = T1.ID_prim
where t1.ID_prim = 1003
and t2.ID_prim = 1003
and inout.ISSOTRX = 'N'
GROUP BY T1.ID_prim, T1.Moved Items, t1.Date
HAVING SUM(T2.Moved Items) <= 16
order by t1.UPDATED desc
하지만 그 금액은 별로 효과가 없어요.원하는 테이블을 인쇄할 Oracle DB용 SQL 문을 만드는 것을 도와줄 수 있는 사람?
질문에 대한 의견을 통해 OP의 설명을 바탕으로 SUM() 분석 함수를 사용하여 실행 합계를 구한 후 조건에 따라 필터링할 수 있습니다.
표:
SQL> SELECT * FROM t;
ID_PRIM ID DT MOVED
---------- ----- --------- ----------
1003 12_1 01-NOV-13 2
1003 12_2 01-OCT-13 3
1003 12_3 01-DEC-14 5
1003 12_4 01-FEB-15 10
1003 12_5 01-APR-12 1
1003 12_11 01-JAN-11 5
6 rows selected.
SQL>
러닝합계
SQL> SELECT t.*, SUM(moved) OVER(ORDER BY dt) sm FROM t ORDER BY dt DESC;
ID_PRIM ID DT MOVED SM
---------- ----- --------- ---------- ----------
1003 12_4 01-FEB-15 10 26
1003 12_3 01-DEC-14 5 16
1003 12_1 01-NOV-13 2 11
1003 12_2 01-OCT-13 3 9
1003 12_5 01-APR-12 1 6
1003 12_11 01-JAN-11 5 5
6 rows selected.
SQL>
희망출력
SQL> WITH DATA AS
2 ( SELECT t.*, SUM(moved) OVER(ORDER BY dt) sm FROM t ORDER BY dt DESC
3 )
4 SELECT * FROM data WHERE sm >= 16;
ID_PRIM ID DT MOVED SM
---------- ----- --------- ---------- ----------
1003 12_4 01-FEB-15 10 26
1003 12_3 01-DEC-14 5 16
SQL>
참고하시기 바랍니다.nov 2013
날짜가 아니라 문자열입니다.날짜를 기준으로 정렬하려면 항상 TO_DATE를 사용하여 명시적으로 날짜로 변환해야 합니다.어쨌든 저는 TO_DATE를 이용하여 샘플 데이터를 만들었습니다.
Update OP는 런타임에 합산된 값의 MAX 값에서 원하는 값을 빼려고 합니다.
SQL> WITH DATA AS
2 ( SELECT t.*, SUM(moved) OVER(ORDER BY dt) sm FROM t ORDER BY dt DESC
3 )
4 SELECT * FROM DATA t WHERE sm >
5 (SELECT MAX(sm) FROM data
6 ) - 16 ;
ID_PRIM ID DT MOVED SM
---------- ----- --------- ---------- ----------
1003 12_4 01-FEB-15 10 26
1003 12_3 01-DEC-14 5 16
1003 12_1 01-NOV-13 2 11
SQL>
업데이트된 쿼리에서 MAX(sm)가 반환됩니다.26
, 그런 다음 행은 조건에 따라 필터링됩니다.WHERE sm > MAX(sm) -16
즉, 'sm' 값이 다음보다 큰 모든 행을 반환합니다.26 -16
예.10
. 대체 변수를 사용하여 값을 입력할 수 있습니다.16
런 타임에
언급URL : https://stackoverflow.com/questions/30705878/how-to-sum-each-row-into-another-column
반응형
'programing' 카테고리의 다른 글
경고:이 비동기 작업 클래스는 정적이어야 합니다. 그렇지 않으면 누출이 발생할 수 있습니다. (0) | 2023.10.31 |
---|---|
jQuery UI Datepicker에서 향후 날짜 사용 안 함 (0) | 2023.10.31 |
블레이드의 조건부 확장 (0) | 2023.10.26 |
Spring @SubscribeMapping이 정말로 어떤 주제에 대해 고객을 구독합니까? (0) | 2023.10.26 |
MYSQL 문 최적화 (0) | 2023.10.26 |