최종 잔액 구하기 0 4 1,523

by 달구지 [2009.04.24 09:48:09]


WITH t AS
     (SELECT '20090101' dt_jojak
           , '20090101' dt_confirm
           , '20090101' sil_dt_georae
           , 100 sell
        FROM DUAL
      UNION ALL
      SELECT '20090102' dt_jojak
           , '20090101' dt_confirm
           , '20090101' sil_dt_georae
           , 100 sell
        FROM DUAL
      UNION ALL
      SELECT '20090103' dt_jojak
           , '20090101' dt_confirm
           , '20090102' sil_dt_georae
           , 100 sell
        FROM DUAL
      UNION ALL
      SELECT '20090103' dt_jojak
           , '20090101' dt_confirm
           , '20090102' sil_dt_georae
           , 100 sell
        FROM DUAL)
SELECT   dt_gbn
       , dt
       , amtsum
       , SUM(amtsum) OVER(PARTITION BY dt_gbn ORDER BY dt ASC)
    FROM (SELECT   '1' AS dt_gbn
                 , dt_jojak AS dt
                 , SUM(sell) AS amtsum
              FROM t
          GROUP BY dt_jojak
          UNION ALL
          SELECT   '2' AS dt_gbn
                 , dt_confirm AS dt
                 , SUM(sell) AS amtsum
              FROM t
          GROUP BY dt_confirm
          UNION ALL
          SELECT   '3' AS dt_gbn
                 , sil_dt_georae AS dt
                 , SUM(sell) AS amtsum
              FROM t
          GROUP BY sil_dt_georae)
ORDER BY dt_gbn
       , dt

이렇게 하면 dt_gbn 별로 잔액을 보여주기는 하는데

만약 dt_gbn 별로 데이터가 20081231 일자로 1000, 2000, 3000 이 있다면 더해서 보여주고 싶은데 안되네요

도움좀 부탁 드려요

 

 

 

by 서성우 [2009.04.24 10:16:56]
정확히 뭘 원하시는지 모르겠네요
제가 생각하는 것과 같은건지 모르겠네요

WITH t AS
(SELECT '20090101' dt_jojak , '20090101' dt_confirm , '20090101' sil_dt_georae, 100 sell FROM DUAL
UNION ALL SELECT '20090102', '20090101', '20090101', 100 FROM DUAL
UNION ALL SELECT '20090103', '20090101', '20090102', 100 FROM DUAL
UNION ALL SELECT '20090103', '20090101', '20090102', 100 FROM DUAL
UNION ALL SELECT '20081231', '20081231', '20081231', 1000 FROM DUAL)
SELECT dt_gbn,
dt,
amtsum,
Decode(dt,'20081231',SUM(amtsum) OVER(PARTITION BY dt),SUM(amtsum) OVER(PARTITION BY dt ORDER BY rownum ASC))
FROM
(SELECT Decode(dt_jojak||dt_confirm||sil_dt_georae,dt_jojak,1,dt_confirm,2,sil_dt_georae,3) dt_gbn,
Greatest(Nvl(dt_jojak,0),Nvl(dt_confirm,0),Nvl(sil_dt_georae,0)) dt,
Sum(sell) amtsum
FROM t
GROUP BY Grouping sets((dt_jojak),(dt_confirm),(sil_dt_georae)))
ORDER BY dt_gbn
, dt

쿼리가 길어지지 않게
UNION ALL을 ?馨? 만들었습니다.

by 달구지 [2009.04.24 10:57:13]
테이블 Insert 하기전에 이전 데이터로 최종 잔액을 구해서
신규 Row Insert 하기전에 최종잔액 + 신규 Row 를 하고 싶다구요

by 서성우 [2009.04.24 11:09:16]
WITH t AS
(SELECT '20090101' dt_jojak , '20090101' dt_confirm , '20090101' sil_dt_georae, 100 sell FROM DUAL
UNION ALL SELECT '20090102', '20090101', '20090101', 100 FROM DUAL
UNION ALL SELECT '20090103', '20090101', '20090102', 100 FROM DUAL
UNION ALL SELECT '20090103', '20090101', '20090102', 100 FROM DUAL
UNION ALL SELECT '20081231', '20081231', '20081231', 1000 FROM DUAL)
SELECT dt_gbn,
dt,
amtsum,
SUM(amtsum) OVER(PARTITION BY dt)
FROM
(SELECT Decode(dt_jojak||dt_confirm||sil_dt_georae,dt_jojak,1,dt_confirm,2,sil_dt_georae,3) dt_gbn,
Greatest(Nvl(dt_jojak,0),Nvl(dt_confirm,0),Nvl(sil_dt_georae,0)) dt,
Sum(sell) amtsum
FROM t
GROUP BY Grouping sets((dt_jojak),(dt_confirm),(sil_dt_georae)))
WHERE dt <= '20090101'
ORDER BY dt_gbn
, dt

최종잔액이면 이걸 말씀하시는것 같네요

by 달구지 [2009.04.24 14:54:37]
감사합니다^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입