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 1365 게시물 읽기
No. 1365
세로로된 데이터를 가로로 출력을 하고 싶은데요..
작성자
이덕형
작성일
2005-11-15 13:29ⓒ
2005-11-15 13:33ⓜ
조회수
5,410

변경일 팀명 과명
------------------------------------------
20051101 전산기획팀 기획조사
20051101 전산기획팀 전산서무
20051101 전산기획팀 전산감사
20051101 전산기획팀 전산보안
20051101 전산기획팀 전산시설
20051101 전산기획팀 전산업무지원
20051101 시스템관리팀 주시스템
20051101 시스템관리팀 시스템통신
20051101 시스템관리팀 중형시스템
20051101 시스템관리팀 전산통신실
20051101 시스템관리팀 컴퓨터실
20051101 시스템관리팀 개인e-뱅킹
20051101 시스템관리팀 기업e-뱅킹
20051101 e-금융팀 텔레뱅킹
20051101 e-금융팀 대행수납
20051101 e-금융팀 공동망
20051101 e-금융팀 CMS


만약.. 위 와 같은 데이터가 있다고 가정하면요...

전산기획팀 시스템관리팀 e-금융팀
-------------------------------------
기획조사 주시스템 텔레뱅킹
전산서무 시스템통신 대행수납
전산감사 중형시스템 공동망
전산보안 전산통신실 ...
.... ....

이런 식으로 나오게 하고 싶거든요??

CASE 문 을 써야 하는지... 프로시져를 사용해서 해야 하는지...

Sybase 및 T-SQL을 잘 다룰 줄을 몰라서.. 이렇게 질문 드립니다...

고수님들의 가르침.. 부탁드립니다...

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

에잇, 오기다...

이거 만들어 보는거다...

 

이러다 일찍 죽지....ㅠㅠ

 

 

 

create table dept
(
변경일 char(8) not null,
팀명 varchar(20) null,
과명 varchar(30) null
)
go


insert into dept values ('20051101','전산기획팀','기획조사'    )
insert into dept values ('20051101','전산기획팀','전산서무'    )
insert into dept values ('20051101','전산기획팀','전산감사'    )
insert into dept values ('20051101','전산기획팀','전산보안'    )
insert into dept values ('20051101','전산기획팀','전산시설'    )
insert into dept values ('20051101','전산기획팀','전산업무지원')
insert into dept values ('20051101','시스템관리팀','주시스템'  )
insert into dept values ('20051101','시스템관리팀','시스템통신')
insert into dept values ('20051101','시스템관리팀','중형시스템')
insert into dept values ('20051101','시스템관리팀','전산통신실')
insert into dept values ('20051101','시스템관리팀','컴퓨터실'  )
insert into dept values ('20051101','시스템관리팀','개인e-뱅킹')
insert into dept values ('20051101','시스템관리팀','기업e-뱅킹')
insert into dept values ('20051101','e-금융팀','텔레뱅킹'      )
insert into dept values ('20051101','e-금융팀','대행수납'      )
insert into dept values ('20051101','e-금융팀','공동망'        )
insert into dept values ('20051101','e-금융팀','CMS'           )
go

 

 

--- 여기서 부터 주욱 실행

-- 일단, 주어진 데이터에 순번을 부여한다.

-- 이것을 #temp 라는 임시 테이블에 넣는다.

create table #temp
(
팀순번 int null,
과순번 int null,
팀명 varchar(30) null,
과명 varchar(30) null
)
go

declare c1 cursor
for
   select 팀명,과명 from dept
   for read only
go

declare @sqltext varchar(10000)
declare @team varchar(30), @part varchar(30)
declare @t varchar(30)
declare @i int, @j int

select @t = '', @i = 1, @j = 0

open c1

fetch c1 into @team, @part

while (@@sqlstatus = 0)
begin
 if @team <> @t select @i = 1, @j = @j + 1

 insert into #temp values (@j, @i, @team, @part)

 select @i = @i + 1, @t = @team

 fetch c1 into @team, @part
end

close c1
deallocate cursor c1
go

 

-- 여기서 Dynamic SQL을 만드는 거다.

-- 팀명을 컬럼수준으로 만들어야 한다. 별명을 쓰자. T1, T2...(이거 힘들었음)

declare c2 cursor
for
   select distinct 팀명, 팀순번 from #temp
   order by 팀순번
   for read only
go

declare @sqltext1 varchar(1000), @sqltext2 varchar(1000), @sqltext varchar(2000)
declare @team varchar(20), @i int

open c2

fetch c2 into @team, @i

select @sqltext1 = "select 과순번"
select @sqltext2 = "select 과순번"
while (@@sqlstatus = 0)
begin
         select @sqltext1 = @sqltext1 + ",max(T" + convert(varchar(3),@i) + ") as """+@team+""""
  
         select @sqltext2 = @sqltext2 + ",case when 팀명='"+@team+"' then 과명 else '' end as T" + convert(varchar(3),@i)

         fetch c2 into @team, @i
end

close c2
deallocate cursor c2

select @sqltext1 =  @sqltext1 + " from ("
select @sqltext2 =  @sqltext2 + " from #temp) a group by 과순번"

exec (@sqltext1 + @sqltext2)
go

 

-- 결과입니다.

과순번      전산기획팀                     시스템관리팀                   e-금융팀                      
----------- ------------------------------ ------------------------------ ------------------------------
1           기획조사                       주시스템                       텔레뱅킹                      
2           전산서무                       시스템통신                     대행수납                      
3           전산감사                       중형시스템                     공동망                        
4           전산보안                       전산통신실                     CMS                           
5           전산시설                       컴퓨터실                                                     
6           전산업무지원                   개인e-뱅킹                                                   
7                                          기업e-뱅킹                                                   
 
7 Row(s) affected


 

존넘님이 2005-11-18 16:02에 작성한 댓글입니다. Edit

이거 derived table(일명 in-line view) 되는 ASE 12.5.3에서 한겁니다.

 

그 이전 버전에서는 그부분을 임시 테이블 쓰는 것으로 바꾸어보세요. 헉헉!

존넘님이 2005-11-18 16:03에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1369웹관련 질문입니다. [1]
송효순
2005-11-24
3077
1368mysql 쿼리문을 sybase로 변환시....도와주세요... [1]
홍창기
2005-11-22
3517
1367dsedit 에서 ping 이 실패라고 나옵니다... [2]
윤관
2005-11-22
4098
1365세로로된 데이터를 가로로 출력을 하고 싶은데요.. [2]
이덕형
2005-11-15
5410
1364Query 수행 속도 [2]
배우자
2005-11-15
3960
1363Sybase SQL Anywhere Studio 싸게 드립니다. [1]
Anywhere
2005-11-14
3567
1362질문.. primarkkey 와 foreignkey [3]
초보
2005-11-09
6045
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다