안녕하십니까.
쿼리 초보입니다. 제가 궁금한 것은 쿼리에서 계산식을 통해 원하는 값을 필드로 등록 할 수있는 것입니다.
자세한 사항은 데이터 테이블 정보는 아래와 같습니다.
1.데이터 테이블
Date | ID | Value |
2020.1.1 | A | 11 |
2020.1.1 | B | 12 |
2020.1.1 | C | 13 |
2020.1.1 | D | 14 |
2020.1.2 | A | 21 |
2020.1.2 | C | 23 |
2. Primary key
- Date, ID
3. 얻고 싶은 정보
- 각 날짜에 대한 특정 ID의 Value 값의 연산 (예: 아래 결과 테이블 참조)
4. 결과 테이블
Date | A+B+C | A+C | (A*D)/12 | B-12 | C*11 |
2019 1/1 | 11+12+13 | 11+13 | (11+14)/12 | 12-12 | 13*11 |
2019 1/2 | 21+0+23 | 21+23 | (21*0)/12 | 0-12 | 23*11 |
혹시 다음과 같은 결과를 쿼리를 통해서 얻을 수 있나요?
가능하다면 어떤식으로 진행해야하는 지 힌트라도 주시면 감사합니다
SELECT t.dt , t.A + t.B + t.C AS "A+B+C" , t.A + t.C AS "A+C" , (t.A * t.D) / 12 AS "(A*D)/12" , t.B - 12 AS "B-12" , t.C * 11 AS "C*11" FROM ( SELECT t.dt , SUM(t.A) AS "A" , SUM(t.B) AS "B" , SUM(t.C) AS "C" , SUM(t.D) AS "D" FROM ( WITH ttt AS( SELECT '2020.1.1' AS dt, 'A' AS ID, 11 AS VALUE FROM DUAL UNION ALL SELECT '2020.1.1' AS dt, 'B' AS ID, 12 AS VALUE FROM DUAL UNION ALL SELECT '2020.1.1' AS dt, 'C' AS ID, 13 AS VALUE FROM DUAL UNION ALL SELECT '2020.1.1' AS dt, 'D' AS ID, 14 AS VALUE FROM DUAL UNION ALL SELECT '2020.1.2' AS dt, 'A' AS ID, 21 AS VALUE FROM DUAL UNION ALL SELECT '2020.1.2' AS dt, 'B' AS ID, 23 AS VALUE FROM DUAL ) SELECT t.dt , CASE WHEN t.id = 'A' THEN t.value ELSE NULL END AS A , CASE WHEN t.id = 'B' THEN t.value ELSE NULL END AS B , CASE WHEN t.id = 'C' THEN t.value ELSE NULL END AS C , CASE WHEN t.id = 'D' THEN t.value ELSE NULL END AS D FROM ttt t ) t GROUP BY t.dt ) t ORDER BY 1 ASC
노가다로 이렇게할려나여
WITH t AS ( SELECT '2020.01.01' dt, 'A' id, 11 v FROM dual UNION ALL SELECT '2020.01.01', 'B', 12 FROM dual UNION ALL SELECT '2020.01.01', 'C', 13 FROM dual UNION ALL SELECT '2020.01.01', 'D', 14 FROM dual UNION ALL SELECT '2020.01.02', 'A', 21 FROM dual UNION ALL SELECT '2020.01.02', 'C', 23 FROM dual ) SELECT dt , a, b, c, d , a+b+c v1 , a+c v2 , ROUND((a*d)/12, 2) v3 , b-12 v4 , c*11 v5 FROM (SELECT dt , NVL(MIN(DECODE(id, 'A', v)), 0) a , NVL(MIN(DECODE(id, 'B', v)), 0) b , NVL(MIN(DECODE(id, 'C', v)), 0) c , NVL(MIN(DECODE(id, 'D', v)), 0) d FROM t GROUP BY dt ORDER BY dt ) a ;
감사합니다
제가 아직 테스트해보지는 않았지만 어떤식으로 풀어나갈지 감이 잡힙니다
WITH t AS ( SELECT '2020.01.01' dt, 'A' id, 11 v FROM dual UNION ALL SELECT '2020.01.01', 'B', 12 FROM dual UNION ALL SELECT '2020.01.01', 'C', 13 FROM dual UNION ALL SELECT '2020.01.01', 'D', 14 FROM dual UNION ALL SELECT '2020.01.02', 'A', 21 FROM dual UNION ALL SELECT '2020.01.02', 'C', 23 FROM dual )
첫 도입부분을 어떤식을 다듬어야 할 지 고민해보겠습니다.