쿼리문 질문 드립니다. 0 4 773

by 고재원 [SQL Query] [2020.11.18 11:56:18]


DB에 상기와 같은 데이터가 있습니다.

AA BB EE FF A
1011 핸드폰 1010 N 0
1012 전화기 1011 N 50 
1018 노트북 1012 Y 10
1049 케이스 1012 Y 10
1087 컴퓨터 1012 Y 10
1139 선풍기 1012 Y 10
1168 테블릿 1012 Y 10

 

 

SELECT AA,BB,EE,FF,

CASE WHEN FF = 'N' THEN

(SELECT SUM(A) FROM RESULT_TEST WHERE EE = Z.AA)

ELSE A END AS 

A

 

FROM RESULT_TEST Z

ORDER BY AA ASC

 

이렇게 하면 전화기 금액은 집계가 되는데 핸드폰 금액까지 어떻게 집계를 하죠.

 

이게 원하는 결과 입니다. select 했을 때

 

 

AA BB EE FF A
1011 핸드폰 1010 N 50
1012 전화기 1011 N 50
1018 노트북 1012 Y 10
1049 케이스 1012 Y 10
1087 컴퓨터 1012 Y 10
1139 선풍기 1012 Y 10
1168 테블릿 1012 Y 10

by 마농 [2020.11.18 13:41:33]
-- Oracle --
WITH t AS
(
SELECT 1011 cd, '핸드폰' nm, 1010 pcd, 'N' yn, 0 v FROM dual
UNION ALL SELECT 1012, '전화기', 1011, 'N',  0 FROM dual
UNION ALL SELECT 1018, '노트북', 1012, 'Y', 10 FROM dual
UNION ALL SELECT 1049, '케이스', 1012, 'Y', 10 FROM dual
UNION ALL SELECT 1087, '컴퓨터', 1012, 'Y', 10 FROM dual
UNION ALL SELECT 1139, '선풍기', 1012, 'Y', 10 FROM dual
UNION ALL SELECT 1168, '테블릿', 1012, 'Y', 10 FROM dual
)
SELECT cd, nm, pcd, yn
     , (SELECT SUM(v)
          FROM t
         START WITH cd = m.cd
         CONNECT BY PRIOR cd = pcd
        ) v
  FROM t m
;
-- http://gurubee.net/lecture/2250

 


by 고재원 [2020.11.18 14:30:03]

WITH t AS
(
SELECT 1011 cd, '핸드폰' nm, 1010 pcd, 'N' yn, 0 v FROM dual
UNION ALL SELECT 1012, '전화기', 1011, 'N',  0 FROM dual
UNION ALL SELECT 1018, '노트북', 1012, 'Y', 10 FROM dual
UNION ALL SELECT 1049, '케이스', 1012, 'Y', 10 FROM dual
UNION ALL SELECT 1087, '컴퓨터', 1012, 'Y', 10 FROM dual
UNION ALL SELECT 1139, '선풍기', 1012, 'Y', 10 FROM dual
UNION ALL SELECT 1168, '테블릿', 1012, 'Y', 10 FROM dual
)

SELECT cd, nm, pcd, yn
     , (SELECT SUM(v)
          FROM t
         START WITH cd = m.cd (cd 에러 발생 현재 MSSQL 2005 버전 입니다.)
         CONNECT BY PRIOR cd = pcd
        ) v
  FROM t m
;


by 마농 [2020.11.18 15:41:12]
-- MSSQL --
WITH t AS
(
SELECT 1011 cd, '핸드폰' nm, 1010 pcd, 'N' yn, 0 v
UNION ALL SELECT 1012, '전화기', 1011, 'N',  0
UNION ALL SELECT 1018, '노트북', 1012, 'Y', 10
UNION ALL SELECT 1049, '케이스', 1012, 'Y', 10
UNION ALL SELECT 1087, '컴퓨터', 1012, 'Y', 10
UNION ALL SELECT 1139, '선풍기', 1012, 'Y', 10
UNION ALL SELECT 1168, '테블릿', 1012, 'Y', 10
)
, t1 AS
(
SELECT cd root_cd
     , cd
     , v
  FROM t
 UNION ALL
SELECT p.root_cd
     , c.cd
     , c.v
  FROM t1 p
 INNER JOIN t c
    ON p.cd = c.pcd
)
SELECT a.cd
     , a.nm
     , a.pcd
     , a.yn
     , b.v
  FROM t a
 INNER JOIN
       (SELECT root_cd
             , SUM(v) v
          FROM t1
         GROUP BY root_cd
        ) b
    ON a.cd = b.root_cd
;

 


by 고재원 [2020.11.19 14:22:04]

감사합니다. ^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입