mssql 표 구조 에 대한 다른 디 스 플레이(표현 뜻 변 하지 않 음)

수요
표 현 력 이 좋 지 않 기 때문에 직접 그림 을 그린다.mssql 환경 에서 그림 1 의 시 계 를 그림 2 의 표 로 바 꿔 야 합 니 다.
             그림 1                 그림 2.분석
  
그림 3
2.1 창설 표

create table #tb
(ID int primary key,
Class nvarchar(max),
[Subject] nvarchar(max),
Score int)
insert into #tb values(1,' (1) ',' ','92')
insert into #tb values(2,' (1) ',' ','91')
insert into #tb values(3,' (1) ',' ','93')
insert into #tb values(4,' (2) ',' ','94')
insert into #tb values(5,' (2) ',' ','95')
insert into #tb values(6,' (2) ',' ','96')
insert into #tb values(7,' (3) ',' ','94')
insert into #tb values(8,' (3) ',' ','96')
insert into #tb values(9,' (3) ',' ','97')
select * from #tb
2.2 그림 3 의 첫 번 째 표를 두 번 째 표 로 전환시킨다

select [Subject], [ (1) ]=[Score]
,[ (2) ]=[Score]
,[ (3) ]=[Score]
from #tb
2.3 그림 3 의 두 번 째 표를 세 번 째 표 로 전환시킨다

-- , ,

-- : 0, ,
select subject,[ (1) ]=case when [Class]=' (1) ' then [Score] else 0 end
,[ (2) ]= case when [Class]=' (2) ' then [Score] else 0 end
,[ (3) ]=case when [Class]=' (3) ' then [Score] else 0 end
from #tb
2.4 그림 3 의 세 번 째 표를 네 번 째 표 로 전환시킨다

select subject, [ (1) ]=max( case when [Class]=' (1) ' then [Score] else 0 end)
,[ (2) ]=max( case when [Class]=' (2) ' then [Score] else 0 end)
,[ (3) ]=max( case when [Class]=' (3) ' then [Score] else 0 end)
from #tb group by subject
 2.5 위의 표기 법 을 간소화 한다

declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename(Class)+'=max( case when [Class]='+quotename(Class,'''')+' then [Score] else 0 end)'
from #tb group by Class
--print @s
exec('select [Subject]'+@s+' from #tb group by [Subject]')
3.분석 과 수요 연장 3.1 간략화 분석
위의 간소화,초보 급 의 나 에 대해 이해 하기 가 매우 힘 들 었 다.그래서 나 는 답 을 알 고 print@s 로 한 걸음 한 걸음 분석 했다.특히 select@s=@s+.........................................................

그림 43.2 수요 연장
아마 위의 수요 가 너무 간단 할 것 이다.그러면 우 리 는 지금 복잡 한 수 요 를 이 끌 어 내 고 반 의 성적 을 동태 적 으로 얻 을 수 있다.예 를 들 어 우리 의 수 요 는 일부 반 의 성적 을 열거 하 는 것 일 수 있다.코드 는 다음 과 같다

declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename(Class)+'=max( case when [Class]='+quotename(Class,'''')+' then [Score] else 0 end)'
from #tb
where Class in( )
group by Class
--print @s
exec('select [Subject]'+@s+' from #tb group by [Subject]')
4.정리
본 고 는 주로 표 의 다른 디 스 플레이 를 실현 하 는데 보통 데 이 터 를 동적 으로 표시 하 는 예 에 사용 된다.어 려 운 점 은 분석 과정 과 기본 적 인 sql 문법 에 있다.

좋은 웹페이지 즐겨찾기