select 한 결과에서 필드명을 포함하여 행 열 바꾸기 0 10 9,406

by 손님 행과열 select [2008.06.03 22:25:19]


오늘 하루 종일 검색해 보고 또 검색해 봤는데 제가 못 찾는건지 안 보이네요.
다름이 아니라 A 라는 테이블이 아래와 같이 있다고 가정하였을때.

A.Table
 a |
----
 1 |
----
 2 |
----
 2 |
----

사용한 쿼리 예
select * from
(select count(*) as a from A.Table where a = 1) a,
(select count(*) as b from A.Table where b = 2) b

=결과=
 a | b |
--------
 1 | 2 |
--------

=원하는 형태=
field1 | field2
---------------
   a   |   1  |
---------------
   b   |   2  |
---------------

이때 결과치의 필드명을 포함하여 행과 열을 바꿀 수 있을까요?
행열 바꾸는건 검색해 보니 DECODE를 이용하면 된다고 하는데
제가 해보려고 하는데 잘 안되더라고요. 고수님들 부탁드립니다.

 

by 마농 [2008.06.04 08:36:02]
이 문제는 행영 바꾸기가 아니라 group by 문제네요.
SELECT 컬럼1, COUNT(*) 컬럼2
FROM 테이블
GROUP BY 컬럼1

by 손님 [2008.06.04 09:11:18]
아마 원하는 형태에서 field1, field2 을 잘못 전달한것 같은데요
예를 들은 쿼리를 날려서 임의의 컬럼명을 지정한 상태로 결과를 뽑은 후에 그 결과에서 임의로 지정한 컬럼명을 포함하여 아래의 원하는 형태로 임의의 필드명을 지정하여 바꾸어 출력 하고 싶어요. ㅜ.ㅜ
아무튼 마농님 답변 감사 드려요.

by 마농 [2008.06.04 09:18:03]
SELECT 'A' Field1, COUNT(*) Field2 FROM ...
UNION ALL
SELECT 'B' Field1, COUNT(*) Field2 FROM ...

by 손님 [2008.06.04 09:44:19]
마농님 감사합니다.
instr, substr 함수와 union all 사용하니 제가 원하는 결과가 나오네요.
정말 정말 감사합니다.

by 마농 [2008.06.04 10:31:36]
질문하신 내용이 충실하지 않은것 같습니다.
물론 union all로 해결하셨다니 다행이긴 하지만 union all이 아닌 좀더 합리적인 방법으로 문제를 해결할 수도 있습니다.
문제를 공유해 보심이 어떨런지요?

by 마농 [2008.06.04 11:22:32]
web_log와 web_log_save는 다른 테이블인가요?
네이버와 다음이 쿼리가 틀리네요. 다음엔 web_log만 있네요.

by 손님 [2008.06.04 11:25:27]
아 아... 테이블 명을 잘못 적었네요 ^^;

select aa.*, bb.*
from (select SUBSTR(path2, INSTR(path2, 'naver'), 5) as pname
from web_log
where path2 like '%naver.com%'
and rownum = 1 order by seq desc) aa,
(select count(path2) pcount
from web_log
where path2 like '%naver.com%') bb
union all
select aa.*, bb.*
from (select SUBSTR(path2, INSTR(path2, 'daum'), 4) as pname
from web_log
where path2 like '%daum.net%'
and rownum = 1 order by seq desc) aa,
(select count(path2) pcount
from web_log
where path2 like '%daum.net%') bb

제가 사용한 쿼리 입니다.
web_log 라는 테이블에서 path2 라는 컬럼에 사이트를 방문한 사람들의 이전 페이지 주소를 남기는데요.
이것을 사이트 별로 구분하여 카운팅을 하는것이 문제였지요.
더 합리적인 방법이 있다면 알려 주시면 저야 감사할 따름 입니다.

by 마농 [2008.06.04 11:30:41]
SELECT 'naver' pname, COUNT(*) pcount
FROM web_log
WHERE path2 LIKE '%naver.com%'
UNION ALL
SELECT 'daum' pname, COUNT(*) pcount
FROM web_log
WHERE path2 LIKE '%daum.net%'

by 손님 [2008.06.04 11:36:25]
아....
마농님 덕분에 쿼리가 확 줄었네요.
아 전 왜 자꾸 어렵게 돌아 가려고 하는지..
쿼리 공부좀 많이 해야겠어요.. 정말 감사합니다.

by 마농 [2008.06.04 11:46:21]
네이버나 다음 말고도 사이트가 더 많다면 그냥 요렇게 해보세요.
보통 같은사이트네에서 url이 15자까지는 동일하다고 가정합니다.
SELECT SUBSTR(path2,1,15) pname, COUNT(*) pcount
FROM web_log
GROUP BY SUBSTR(path2,1,15)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입