sql 을 통 해 데이터 투시 표를 만 들 고 데이터베이스 시트 행렬 변환 (pivot 와 Unpivot 용법) (1)

3510 단어 OracleMSSqlServer
mssql 에서 pivot 를 사용 하여 데 이 터 를 통계 하여 엑셀 과 같은 투시 표 기능 을 실현 할 수 있다 는 것 을 잘 알 고 있 습 니 다.
1. MSsqlserver 에서 우리 의 일반적인 용법
1、Sqlserver     
---     
Create table s(


    [name] nvarchar(50),
    book nvarchar(50),
    saledNumber int
)
----      
insert into s ([name],book,saledNumber) values('  ','java      ',10);
insert into s ([name],book,saledNumber)values('  ','java      ',15);
insert into s ([name],book,saledNumber)values('  ','C#    ',8);
insert into s ([name],book,saledNumber)values('  ','java      ',7);
insert into s ([name],book,saledNumber)values('  ','java      ',9);
insert into s ([name],book,saledNumber)values('  ','java      ',2);
insert into s ([name],book,saledNumber)values('  ','C#    ',3);
insert into s ([name],book,saledNumber)values('  ','java      ',5);
insert into s ([name],book,saledNumber)values('  ','C#    ',5);


---1、  case when   
SELECT [name], sum(case  book when 'java      ' then saledNumber else 0 end) as [java      ],sum(case  book when 'C#    ' then saledNumber else 0 end) as [C#    ], sum(saledNumber) as [sum] from s group by [name]


---2、  pivot
select sa.name,sa.java      ,sa.C#     ,sa.java      +sa.C#     as    from s
 pivot(sum(saledNumber) for book in (java      ,C#    )) sa
、oracle
---     
Create table s(

    name varchar(50),
    book varchar(50),
    saledNumber number(9)
)
----      
insert into s (name,book,saledNumber) values('  ','java      ',10);
insert into s (name,book,saledNumber)values('  ','java      ',15);
insert into s (name,book,saledNumber)values('  ','C#    ',8);
insert into s (name,book,saledNumber)values('  ','java      ',7);
insert into s (name,book,saledNumber)values('  ','java      ',9);
insert into s (name,book,saledNumber)values('  ','java      ',2);
insert into s (name,book,saledNumber)values('  ','C#    ',3);
insert into s (name,book,saledNumber)values('  ','java      ',5);
insert into s (name,book,saledNumber)values('  ','C#    ',5);
----

---1、  case when   
SELECT name, sum (case book when 'java 입문 부터 정통 까지' then saledNumber else 0 end) as java 입문 부터 정통 까지, sum (case book when 'C \ # 고급 프로 그래 밍' then saledNumber else 0 end) as C \ # 고급 프로 그래 밍, sum (saledNumber) as sum from s group by name;
---2、  pivot
select * from (select name,saledNumber,book from s group by name, saledNumber, book ) 
 
  
 pivot(sum(saledNumber) for book in ('java      ','C#    ')) ;

설명 이 명확 하지 않 거나 잘못된 부분 이 있 으 면 수정 사항 을 알려 주 십시오. Oacle 에 서 는 Pivot 와 Unpivot 에 대해 더 많은 것 을 알려 주 십시오.
간단 한 SQL 을 사용 하여 스프 레 드 시트 형식의 교차 표 보고 서 를 사용 하여 모든 관계 표 의 정 보 를 표시 하고 교차 표 의 모든 데 이 터 를 관계 표 에 저장 합 니 다.Oacle 공식 인 스 턴 스 를 참고 하 십시오.
http://www.oracle.com/technetwork/cn/articles/11g-pivot-101924-zhs.html
---1、  case when   

좋은 웹페이지 즐겨찾기