database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39983 게시물 읽기
No. 39983
group by와 union, 그리고 order by.... 질문입니다.
작성자
정성태(seong79)
작성일
2013-01-24 03:45
조회수
7,324

안녕하세요

고생이 많으십니다.

일이 진행이 안되서 문의 드립니다.

 

궁금한게 2가지 인데요.

하나는 ...

그룹이 되는 2개의 칼럼과 기타 다른 정보가 있는 칼럼들이 있는 테이블이 있습니다.

테이블에서 SUM(칼럼3) 정보를 포함한  목록을 가져오는데... 소계를 해볼까해서

GROUP BY ROLLUP (칼럼1, 칼럼2)

이렇게 소계를 포함한 ROW들을 가져오는데.. 그럼 기준이 아닌 칼럼의 정보들은 어떻게 가져오는지 궁금합니다.

다른 분들꼐서는 어떤 방법을 사용하시는지요?

노하우 좀 알려주시면 감사하겠습니다. 팁이라도... 굽신굽신..

 

또 하나의 질문..이요..

UNION을 이용해서 위 문제 해결을 시도했습니다.

그런데 다른 부분에서 막혀서요..

쿼리는.. 아래...참고를..

WITH
T1 AS (
SELECT '00' CODE1, '12' CODE2, '가' CODE3, '2012' YEAR, '콩나물' NAME, 1 POINT, 'DASD' ETC1, 33 ETC2 FROM DUAL
UNION ALL
SELECT '00', '12', '나', '2012', '화분', 2, 'ASFAS', 23 FROM DUAL
UNION ALL
SELECT '00', '12', '아', '2012', '책', 2, 'ASFAS', 23 FROM DUAL
UNION ALL
SELECT '00', '15', '타', '2012', '막걸리', 2, 'ASFAS', 23 FROM DUAL
UNION ALL
SELECT '01', '18', '가', '2012', '맥주', 2, 'ASFAS', 23 FROM DUAL
UNION ALL
SELECT '01', '18', '바', '2012', '에프킬라', 2, 'ASFAS', 23 FROM DUAL
UNION ALL
SELECT '01', '18', '카', '2012', '귤', 2, 'ASFAS', 23 FROM DUAL
UNION ALL
SELECT '07', '18', '카', '2012', '우유', 2, 'ASFAS', 23 FROM DUAL
UNION ALL
SELECT '07', '18', '타', '2012', '화장지', 2, 'ASFAS', 23 FROM DUAL
UNION ALL
SELECT '07', '23', '파', '2012', '열쇠', 2, 'ASFAS', 23 FROM DUAL

)
SELECT
    '1' AS SEQ,
    CODE1,
    CASE WHEN YEAR >= '2008' THEN CODE2 ELSE CODE3 END AS CODE,
    YEAR,
    NAME,
    POINT,
    ETC1,
    ETC2
FROM T1
UNION ALL
SELECT
    '2' AS SEQ,
    CODE1,
    CASE WHEN YEAR >= '2008' THEN CODE2 ELSE CODE3 END AS CODE,
    '' AS YEAR,
    '' AS NAME,
    SUM(POINT) AS POINT,
    '' AS ETC1,
    0 AS ETC2
FROM T1
GROUP BY ROLLUP (CODE1,
                 CASE WHEN YEAR >= '2008' THEN CODE2 ELSE CODE3 END )
ORDER BY CODE1, CODE, SEQ                                                                               --CASE WHEN 4 >= '2008' THEN CODE2 ELSE CODE3 END

 

이렇게 해서 소계가 있는 ROW까지는 보았는데..

년도 정보에 따라 CODE2와 CODE3 를 바꿔가며 정렬을 해야해서요...

ORDER BY에 CASE문을 사용하고 싶어요..

 

참고.로....

CODE2와 CODE3이

자료 형식이 달라요.

CODE2 숫자..

CODE3 문자..

 

그리고.

 

ORDER BY 에 CASE 문을 써봤더니... UNION 이라서 그런가...

ORA-01785 : ORDER BY item must be the number of a select-list expression..

이라고 하네요;;;;

 

아 어떻게 해야할까요? ㅠㅠ

 

도움 바랍니다... 

 

그럼 고생하셔요.. 

 

 

이 글에 대한 댓글이 총 2건 있습니다.

1번 답변.
기준이 되는 두개 컬럼외 다른 항목들이 두개 컬럼에 종속된 정보라면
그냥 그룹바이에 추가해 주시면 됩니다.
이 경우, 최종결과 건수에는 변화가 없어야 합니다.
롤업에서는 기준항목과 함께 괄호로 묶어주세요.
 GROUP BY (gb1, (gb2, c1, c2, c3))


2번답변.
1번에서의 롤업이 해결된다면 굳이 Order By 고민 안하셔도 될듯 하구요.
Union All 에서 정렬할 경우 정렬 전 최종 결과 확인하셔서
해당 타이틀(항목명)으로 정렬하시거나, 컬럼순서 번호로 정렬하셔도 됩니다.
 ORDER BY code1, code
 ORDER BY 2, 3


원하시는 결과자료도 함께 보여주시면 롤업 도외드릴께요.
말로는 쉽지만 막상 해보면 어렵거든요.
위에 예시자료는 2012 년만 있는데...
2008년 자료까지 함께 해서 결과자료 만들어 주세요.

마농(manon94)님이 2013-01-24 10:46에 작성한 댓글입니다.

마농님 감사드립니다.

그때 바로 댓글 달려고 했는데;;;;

database.sarang.net 이 접속이 안되더라구요. 

 

알려주신 GROUP BY (gb1, (gb2, c1, c2, c3))으로 해결하였습니다.

그룹을 따로 지정해 줄 수 있다는 사실을 몰랐네요.

알려주셔서 감사드립니다.

정말 감사드립니다.

 

즐거운 한 주 되시길 바랍니다.!!

정성태(seong79)님이 2013-02-04 13:50에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39987조회 데이터..
사랑
2013-01-25
5105
39985[급한 질문] 여러개 테이블을 조인하여 업데이트하기
이후영
2013-01-25
5365
39984특정데이터가 없을때 조회쿼리(질문수정) [4]
왕대가르시아
2013-01-24
6856
39983group by와 union, 그리고 order by.... 질문입니다. [2]
정성태
2013-01-24
7324
39982한번에 묶어서 표현하고 싶습니다. [1]
초보자
2013-01-23
5178
39981Update문 문의드립니다. [2]
새하정
2013-01-22
4762
39980시세이력과 현시세의 차이를 나타내려고 합니다. [2]
초보
2013-01-18
5517
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다