Sql 행렬 변환 은 우리 가 데 이 터 를 저장 하고 보 여 주 는 데 편리 합 니 다.

MS Sql Server 2005 마이크로소프트 에서 pivot 와 unpivot 를 출시 하여 행렬 전환 을 실현 하 였 는데 이것 은 우리 가 데 이 터 를 저장 하고 데 이 터 를 보 여 주 는 데 큰 편 의 를 주 었 다.오늘 은 이 두 키 워드 를 분석 하고 사례 를 결합 하여 데 이 터 를 어떻게 저장 하고 데 이 터 를 어떻게 보 여 주 는 지 설명 한다.예 를 들 어 학생 선택 과목 과 성적 시스템 에 표 가 한 장 있 는데 이 표 는 학생 들 의 과정 성적 을 저장 하고 우 리 는 과정의 많 고 적 음 을 예측 할 수 없 기 때문에 일반 표 는 다음 과 같이 디자인 된다.그림 1 마지막 열 은 수업 번호 로 개학 후에 도 학생 들 이 선택 할 수 있 도록 수업 을 늘 리 든 말 든 상관없다.그러면 우리 가 사용자 에 게 보 여 줘 야 할 보고 서 는 보통 이렇다.그림 2 데 이 터 를 저장 할 때 열 식 저장 소 를 사용 하 는 것 을 볼 수 있 습 니 다.마지막 으로 보 여 주 는 데 이 터 는 줄 식 디 스 플레이 입 니 다.어떻게 실현 합 니까?아래 상세 한 분석 설명:표 문 구 를 만 듭 니 다
 
USE [master]
GO
/****** Object: Table [dbo].[Table_1] Script Date: 08/06/2013 13:55:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Table_1](
[name] [varchar](50) NOT NULL,
[score] [real] NOT NULL,
[subject_id] [int] NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
테스트 데 이 터 를 삽입 합 니 다
 
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( ' ' , 90 , 1 );
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( ' ' , 80 , 2 );
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( ' ' , 70 , 3 );
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( ' ' , 50 , 1 );
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( ' ' , 40 , 2 );
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( ' ' , 60 , 1 );
현재 테이블 을 조회 합 니 다.1 중의 데 이 터 는 바로 그림 1 의 결과 이다.지금 우 리 는 그림 2 의 결 과 를 얻 으 려 면 아래 의 문 구 를 사용 해 야 한다
 
SELECT [name],[1],[2],[3]
FROM [master].[dbo].[Table_1]
pivot
(
sum(score) for subject_id in ([1],[2],[3])
) as pvt
GO
만약 에 자체 데이터 베이스 표 에 저 장 된 것 이 그림 2 처럼 그림 1 의 방식 으로 나타 나 려 면 unpivot 를 사용 해 야 한다.이렇게 할 수 있다
 
SELECT [name],[subject_id],[score]
FROM
(
SELECT [name],[1],[2],[3]
FROM [master].[dbo].[Table_1]
pivot
(
sum(score) for subject_id in ([1],[2],[3])
) as pvt
) p
unpivot
(
score for subject_id in([1],[2],[3])
) as unpvt
물론 나 는 Table 에 있다.1 을 바탕 으로 pvt 를 줄 식 저장 방식 으로 바 꾼 다음 에 unpivot 로 열 식 으로 보 여 줍 니 다.

좋은 웹페이지 즐겨찾기