-- 안녕하십니까- 혼자서는 답이 안나와서 질문 남깁니다. 도움 부탁드립니다 --지금 이렇게 sql문을 짰는데 SELECT A.NAME 소프트웨어명, DECODE(SUBSTR(D.GUBN, 1, 2), '10', COUNT(B.CODE), 0) 그룹1, DECODE(SUBSTR(D.GUBN, 1, 2), '20', COUNT(B.CODE), 0) 그룹2, DECODE(SUBSTR(D.GUBN, 1, 2), '30', COUNT(B.CODE), 0) 그룹3, DECODE(SUBSTR(D.GUBN, 1, 2), '40', COUNT(B.CODE), 0) 그룹4, DECODE(SUBSTR(D.GUBN, 1, 2), '50', COUNT(B.CODE), 0) 그룹5 FROM SFTWA A, SFTWB B, INSA C, DEPT D WHERE A.CODE = B.CODE AND B.USER = C.EMPL AND C.CODE = D.CODE GROUP BY D.GUBN, A.NAME ORDER BY A.NAME ASC; 이 상태로 조회가 되기는 됩니다. 문제는, 결과가 소프트웨어명 그룹1 그룹2 그룹3 그룹4 그룹5 --------------------------------------------------------------- 소프트웨어1 0 1 0 0 0 소프트웨어1 3 0 0 0 0 소프트웨어1 0 0 5 0 0 소프트웨어1 0 0 0 0 2 소프트웨어2 6 0 0 0 0 소프트웨어2 0 11 0 0 0 . . . 이런식으로 조회가 되는데요. 제가 원하는 건 소프트웨어명 그룹1 그룹2 그룹3 그룹4 그룹5 --------------------------------------------------------------- 소프트웨어1 3 1 5 0 2 소프트웨어2 6 11 0 0 0 소프트웨어3 5 8 3 6 17 이런식으로 결과를 출력하고 싶습니다.
어느 부분을 어떻게 수정해보면 좋을지 조언 좀 부탁드립니다. sql이 완전히 잘못 되었나요? 설명을 잘 했는지 모르겠네요. 오늘도 좋은 하루들 보내시길-
헐 감사합니다 아찌님
MAX 붙여보니까 그룹함수 문제가 생겨서 고민했었는데 지금 말씀듣고 다시 해서 해결했습니다
감사합니다 ㅎ
근데 이렇게 하니까
소프트웨어1 3 1 5 0 2
소프트웨어2 6 11 0 0 0
소프트웨어3 5 8 3 6 17
이런식으로 나오는게 아니라
소프트웨어200 4 5 1 0 9
이렇게 한 개의 로우만 반환되네요. 첫 번 째 로우부터 마지막 로우까지 한 번에 출력할 수는 없을까요?
소프트웨어명으로 그룹핑했는데도 그러네요.
뭔가 될듯 될듯 한데 ㅎㅎ 남은 부분은 제가 좀 더 고민해 보겠습니다.
도움주셔서 정말 감사합니다-
고민하다가 이 방식으로 어떻게 하게됐습니다. 소 개구리 밟는 격으로 됐는데
아발란체님 댓글이 바로 그거네요- 감사합니다 해놓고도 댓글보고 이해가 됐어요 ㅎ
-- 1. 그룹바이 항목에서 구분을 빼셔야 하구요
-- 2. Decode(Count)가 아닌 Count(Decode) 하셔야 하구요
-- 3. 카운트하는데 굳이 컬럼을 카운트할 필요는 없습니다.
SELECT a.name 소프트웨어명
, COUNT(DECODE(SUBSTR(d.gubn, 1, 2), '10', 1)) 그룹1
, COUNT(DECODE(SUBSTR(d.gubn, 1, 2), '20', 1)) 그룹2
, COUNT(DECODE(SUBSTR(d.gubn, 1, 2), '30', 1)) 그룹3
, COUNT(DECODE(SUBSTR(d.gubn, 1, 2), '40', 1)) 그룹4
, COUNT(DECODE(SUBSTR(d.gubn, 1, 2), '50', 1)) 그룹5
FROM sftwa a
, sftwb b
, insa c
, dept d
WHERE a.code = b.code
AND b.user = c.empl
AND c.code = d.code
GROUP BY a.name
ORDER BY a.name
;