(수정) sql 쿼리로 가능 한가요...? 부탁드립니다.. 0 4 1,106

by 재래개 [SQL Query] [2019.06.14 11:58:47]


안녕하세요... 아래 표와 같이 쿼리를 만들려고 합니다.. 

쿼리로 이게 가능 한가요.....?

머리가 한움큼 빠졌습니다 ㅠㅠ

 

부탁드립니다..

 

 

※ 표 수정하여 다시 올렸습니다.  

 

SELECT 'A' 설비, 'AC' 약품, '주간' 작업조, 5 투입량, '2019-06-01' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '야간' 작업조, 4 투입량, '2019-06-01' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '주간' 작업조, 10 투입량, '2019-06-02' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '주간' 작업조, 4 투입량, '2019-06-03' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '주간' 작업조, 6 투입량, '2019-06-10' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '야간' 작업조, 5 투입량, '2019-06-10' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '주간' 작업조, 7 투입량, '2019-06-14' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, '황' 약품, '주간' 작업조, 1 투입량, '2019-06-03' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, '황' 약품, '주간' 작업조, 2 투입량, '2019-06-04' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, '황' 약품, '주간' 작업조, 4 투입량, '2019-06-05' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, 'CA' 약품, '주간' 작업조, 5 투입량, '2019-06-03' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, 'CA' 약품, '야간' 작업조, 6 투입량, '2019-06-04' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, 'CA' 약품, '야간' 작업조, 9 투입량, '2019-06-10' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, 'CA' 약품, '주간' 작업조, 7 투입량, '2019-06-14' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '주간' 작업조, 9 투입량, '2019-06-03' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '야간' 작업조, 2 투입량, '2019-06-03' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '주간' 작업조, 1 투입량, '2019-06-05' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '야간' 작업조, 2 투입량, '2019-06-05' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '주간' 작업조, 5 투입량, '2019-06-06' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '야간' 작업조, 7 투입량, '2019-06-11' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '주간' 작업조, 7 투입량, '2019-06-13' 투입일  FROM dual

 

설비 약품 작업조 1일 2일 3일 4일 5일 6일 7일 8일 9일 10일 11일 12일 13일 14일 15일 16일 17일 18일 19일 20일 21일 22일 23일 24일 25일 26일 27일 28일 29일 30일 31일 주,야누계 종합누계
a AC 주간 5 10 4             6       7                                   32 41
야간 4                 5                                           9
b 주간     1 2 4                                                     7 7
야간                                                               0
CA 주간     5                     7                                   12 27
야간       6           9                                           15
c 알루미늄 주간     9   1 5             7                                     22 33
야간     2   2           7                                         11
by 마농 [2019.06.14 12:31:36]

원본 대비 결과값이 일치하지 않네요?
작업조가 반복되어 나오는 이유도 모르겠구요?


by 재래개 [2019.06.14 13:39:52]

쿼리 = 표 , 작업조 수정 하여 다시 올렸습니다. 헷갈리게 해드려서 죄송합니다..


by jkson [2019.06.14 15:51:57]
WITH T AS
(
SELECT 'A' 설비, 'AC' 약품, '주간' 작업조, 5 투입량, '2019-06-01' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '야간' 작업조, 4 투입량, '2019-06-01' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '주간' 작업조, 10 투입량, '2019-06-02' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '주간' 작업조, 4 투입량, '2019-06-03' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '주간' 작업조, 6 투입량, '2019-06-10' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '야간' 작업조, 5 투입량, '2019-06-10' 투입일  FROM dual
UNION ALL SELECT 'A' 설비, 'AC' 약품, '주간' 작업조, 7 투입량, '2019-06-14' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, '황' 약품, '주간' 작업조, 1 투입량, '2019-06-03' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, '황' 약품, '주간' 작업조, 2 투입량, '2019-06-04' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, '황' 약품, '주간' 작업조, 4 투입량, '2019-06-05' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, 'CA' 약품, '주간' 작업조, 5 투입량, '2019-06-03' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, 'CA' 약품, '야간' 작업조, 6 투입량, '2019-06-04' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, 'CA' 약품, '야간' 작업조, 9 투입량, '2019-06-10' 투입일  FROM dual
UNION ALL SELECT 'B' 설비, 'CA' 약품, '주간' 작업조, 7 투입량, '2019-06-14' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '주간' 작업조, 9 투입량, '2019-06-03' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '야간' 작업조, 2 투입량, '2019-06-03' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '주간' 작업조, 1 투입량, '2019-06-05' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '야간' 작업조, 2 투입량, '2019-06-05' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '주간' 작업조, 5 투입량, '2019-06-06' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '야간' 작업조, 7 투입량, '2019-06-11' 투입일  FROM dual
UNION ALL SELECT 'C' 설비, '알루미늄' 약품, '주간' 작업조, 7 투입량, '2019-06-13' 투입일  FROM dual
)
SELECT A.설비, A.약품, B.작업조, D01, D02, D03, D04, D05, D06, D07, D08, D09, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25, D26, D27, D28, D29, D30, D31, NVL(A.주야누계,0) AS 주야누계, NVL(A.종합누계,0) AS 종합누계
  FROM
 (SELECT '주간' AS 작업조 FROM DUAL UNION ALL
  SELECT '야간' AS 작업조 FROM DUAL) B
 LEFT OUTER JOIN  
 (SELECT *
    FROM
    (
    SELECT 설비, 약품, 작업조, 투입량, SUBSTR(투입일,9) AS 투입일
         , SUM(투입량) OVER(PARTITION BY 설비,약품,작업조) AS 주야누계
         , SUM(투입량) OVER(PARTITION BY 설비,약품) AS 종합누계
      FROM T
    )
  PIVOT (SUM(투입량) FOR 투입일 IN ('01' AS D01,'02' AS D02,'03' AS D03,'04' AS D04,'05' AS D05,'06' AS D06,'07' AS D07,'08' AS D08,'09' AS D09,'10' AS D10
                                   ,'11' AS D11,'12' AS D12,'13' AS D13,'14' AS D14,'15' AS D15,'16' AS D16,'17' AS D17,'18' AS D18,'19' AS D19,'20' AS D20
                                   ,'21' AS D21,'22' AS D22,'23' AS D23,'24' AS D24,'25' AS D25,'26' AS D26,'27' AS D27,'28' AS D28,'29' AS D29,'30' AS D30,'31' AS D31))
 ) A
PARTITION BY (A.설비,A.약품)
       ON (A.작업조 = B.작업조)
 ORDER BY A.설비, REGEXP_COUNT(SUBSTR(A.약품,1,1),'[가-힝]') DESC, A.약품, A.작업조 DESC
 
--SELECT LISTAGG(''''||LPAD(LEVEL,2,'0')||''' AS D' || LPAD(LEVEL,2,'0')  ,',') WITHIN GROUP(ORDER BY LEVEL) FROM DUAL CONNECT BY LEVEL <= 31
--SELECT LISTAGG( 'D' || LPAD(LEVEL,2,'0')  ,', ') WITHIN GROUP(ORDER BY LEVEL) FROM DUAL CONNECT BY LEVEL <= 31

 


by 재래개 [2019.06.14 16:29:29]

감사합니다

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