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
운영게시판
최근게시물
Sybase Q&A 4079 게시물 읽기
No. 4079
여러분이라면?
작성자
조민형(whalsgud)
작성일
2010-12-20 00:27
조회수
5,124

table1 --------
code1 | code2
11111  | 1bbbb
21111  | 2bbbb
31111  | 3bbbb
 
'
'table2 --------
numb | code2
1aaa  | 1bbbb
2aaa  | 2bbbb
3aaa  | 3bbbb
.
.table3 --------
name | codea | codeb
1aaa  | k1234   | 1000
2aaa  | km153   | 2000
3aaa  | m1234  | 1500
2aaa  | l1234    | 900
.
table4------ (total 12 row)
value
14  
15    
16   
.
.
13

4개의 테이블에서 table1의 code1의 값으로  검색하면 아래서 처럼 jsp로 보여줘야 합니다. [중복 검색 가능]
ex) 21111로 검색을 했을때
table1의 code1가 21111과 같은 code2의 값과 같은
table2의 code2값과 같은 numb의 값과 같은
table3의 값을 출력해야합니다..
말은 복잡하지만 결국 테이블 3개를 조인한 후 그 값과 그 토탈값에 추가 컬럼을 출력시키는 건데요..

code      | name | number  | value1 |  value2 |  ~ |  value12
---------------------------------------------------------------------------------
21111   | all          | 2900     |    14     |   15       | ~  |    13
               | km153 | 2000     |      -      |      -        | ~  |      -       
               | l1234   | 900        |      -      |      -        | ~  |      -      

11111   | all         | 1000        |    14   |   15       | ~  |    13
               | k1234  | 1000       |    -       |    -          | ~ |      -      
.
.
.

code  : table1.code1의 값
name : 검색값에 해당하는 table3의 codea값
number : 검색값에 해당하는 table3의 codeb값
   name이 all 인 경우 검색값에 해당하는 table3의 codeb값의 합
value1~value12 : table4의 row값을 컬럼으로 출력
 

여러분은 어떻게 하시겠어요?
이미 만들어진 테이블이기 때문에 따로 뷰를만들거나 하는 방법은 사용할수 없구요..
전 테이블 3개 조인 후 all에 해당하는 로우를 따로 빼와서 합치는 방법을 썼는데요.

여러분은 어떻게 하시겠어요?

제가 한건 속도가 잘 안나오더라구요..

아 글구 디비는 sybase인데.
오라클이나 다른 디비에서라도 어떻게 해결할지 알고 싶네요..
 

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

table4의 값이 명확하지 않아 다는 설명을 못드리고

합계를 구하는 방법은

카티션 곱을 이용하시면 됩니다.

select  max(case when c.num_type = 1 then a.코드

                               when  c.num_type = 2 then '합계'

                 end)

      ,   sum(number)

  from  tab1 a, tab2 b,

           (select 1 num_type union all

            select 2

         ) c

 where b.코드 = a.코드

group by case when c.num_type = 1 then a.코드

                         when  c.num_type = 2 then ''

                 end

위의 방법은 DBMS 와 상관없이 사용이 가능합니다.

 

그리로 row 의 값을 column으로 바꾸는 방법은

max(case when 값 = value1 then 컬럼)

이런 방법을 사용합니다.

이를 pivoting이라는 단어를 사용하더군요

 

김충관(kcg1932)님이 2011-07-05 14:54에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4082Sybase ASE가 갑자기 기동이 안됩니다. [1]
임희성
2010-12-30
5688
4081str_replace에 대해 질문드립니다^^ [2]
김동한
2010-12-27
5331
4080사이베이스 암호 [2]
aspa
2010-12-20
5726
4079여러분이라면? [1]
조민형
2010-12-20
5124
4078암호화와 복호화좀 가르쳐 주세요 [1]
이용성
2010-12-16
5301
4077IQ timestamp 관련질문입니다.
왕초보
2010-12-07
4421
4076급합니다~ SQL 문의
궁금해
2010-12-01
4680
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2021 DSN, All rights reserved.
작업시간: 0.012초, 이곳 서비스는
	PostgreSQL v13.3으로 자료를 관리합니다