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
운영게시판
최근게시물
MS-SQL Q&A 1803 게시물 읽기
No. 1803
그룹화에 과한 쿼린데 좀 봐주세요..........
작성자
디자이너(meiswoo)
작성일
2005-03-03 16:54
조회수
3,284

SELECT n,index_num,step,code,super_code,cate_name,image1,image2,skin_image,list_option FROM category WHERE super_code='000000' or super_code='020000'
order BY index_num

일단 일반적인 쿼리구요..

제가 할려고 하는 건 여기서 super_code를 가지고 그룹을 만들려고 합니다.

예를들어 데이타가

super_code code
먹는거 000000 010000
과일 010000 010100
010000 010200
못먹는거 000000 020000
020000 020100
자동차 020000 020200


이렇게 있을때 제가 뽑을려는 형태는

1먹는거(super_code)

2과일

3쌀

4못먹는거(super_code)

5집

6자동차

 

이런식으로 super_code로 그룹을 하고 싶은데

좀 봐주실 고수님 안계신가요;;;;

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

데이터가 없어 확인하기가 힘든데요..

샘플데이터를 주고

출력의 샘플을 주면 고민을 같이 할 수 있지 않을까 싶은데요 ^^

여리님이 2005-03-03 17:45에 작성한 댓글입니다. Edit

음그러니까 저기 super_code라고 하는 먹는거 와 못먹는거

저게 가장큰 1차 카테고리구요 과일에서 자동차까지는

그 슈퍼코드에 포함된 2차 카테고리 거든요

select 구문을 써서  리스트를 뽑게될경우

먹는거 라는 데이타가 먼저 나오고 그하위로 과일 쌀이 출력되고

그다음으로 못먹는거 데이타가 나오고 그하위데이타인 집 자동차가

출력이 되는 형태를 원하고있습니다.

저 super_code로 그룹을 지정할수있었음 좋겠는데 가능할까요...

디자이너(meiswoo)님이 2005-03-03 17:54에 작성한 댓글입니다.

그룹의 의미를 본다면,

현재 코드테이블의 구조를 조금 바꾸는게 좋을 듯 합니다.

super_code가 가지는 값을 보면,

000000가 의미하는 것은 root를 의미하는 것 같네요..

각 root에서 code를 찾아나가는 방식으로 보여집니다.

 

즉, 현재의 방식에서는 자기자신의 테이블을 recursive하게 추출해야 할 것 같네요. 현재 데이터는 1단계의 depth를 가지고 있는데, 만약 그 깊이 역시 변한다면, terminal을 나타내는 칼럼도 필요하지 않을까 싶네요..

예를 들어, 먹는거 => 과일 => 딸기.. 와 같이요..

 

제가 추천하고 싶은 방법은 코드 테이블을 약간 바꾸는 겁니다..

group_code를 추가하면 어떨까 싶네요..

 

일반적인 코드 테이블을 보자면 다음과 같습니다.

 

대분류코드, 대분류코드설명, 중분류코드, 중분류코드설명, 소분류코드, 소분류코드설명, 전체코드, 전체코드 설명..

 

여기서 전체코드는 대분류코드+중분류코드+소분류코드로 이루어지며, Primary Key가 될 것입니다..

참고로, 위와 같이 3단계보다는 2단계로 해서 사용하는 경우가 많을 것입니다.

 

이렇게 되면, 대분류코드로 그룹화하는 것이 아주 간단하겠죠..

 

그럼..

길가는 나그네..님이 2005-03-04 11:17에 작성한 댓글입니다.
이 댓글은 2005-03-04 11:18에 마지막으로 수정되었습니다. Edit

use testdb
go

drop table test_rec

create table test_rec (
title_name varchar(20)
, super_code varchar(6)
, code varchar(6)
)

insert into test_rec values ('eatable', '000000', '010000')
insert into test_rec values ('fruit', '010000', '010100')
insert into test_rec values ('rice', '010000', '010200')
insert into test_rec values ('un-eatable', '000000', '020000')
insert into test_rec values ('house', '020000', '020100')
insert into test_rec values ('car', '020000', '020200')
go

-- 단순히 code 순서대로 출력
-- 이런 경우, 원하는 순서에 맞게 코드를 설정하지 않으면 안 되겠죠..
select * from test_rec
  order by code asc
go

-- 그룹코드 추가
alter table test_rec
  add group_code varchar(3) null
go

update test_rec set group_code = left(code, 3)
go

-- group 코드를 가지고 원하는 작업 가능하겠죠..
-- 사실 무슨 작업을 원하시는 건지는 확실히 모르겠지만요.. ^^;;

길가는 나그네..님이 2005-03-04 11:32에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1806ORACLE 테이블과 MS-SQL 테이블 조인하는 방법좀 가르쳐 주세요 [3]
TOM
2005-03-07
3237
1805SQL SERVER 관련 참고 사이트
채승룡
2005-03-03
3180
1804데이터베이스 관리_1
채승룡
2005-03-03
5382
1803그룹화에 과한 쿼린데 좀 봐주세요.......... [4]
디자이너
2005-03-03
3284
1802데이터 새로 정렬하는부분 좀 도와주세요.. [1]
냐하하하
2005-03-03
2861
1801컬럼을 로우로 쿼리해 올수 있나요? [2]
김윤희
2005-03-02
5868
1800스크립트로 DB 구조가져오는것을 쿼리로?? [1]
김행남
2005-03-02
3642
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다