2014-04-28 3 views
0

쿼리 출력 문제로 어려움을 겪고 있습니다. 나는 학년 열에서 중요한 등급의 종류 중 일부는 자신의 열로 설정하려는 급 출력의SQL Server 피벗 지정 열

CREATE TABLE #Subject (ID INT PRIMARY KEY IDENTITY, Name NVARCHAR(50)) 
CREATE TABLE #Student (ID INT PRIMARY KEY IDENTITY, Name NVARCHAR(50)) 
CREATE TABLE #Grade (ID INT PRIMARY KEY IDENTITY, 
     StudentID INT REFERENCES #Student(ID), 
     SubjectID INT REFERENCES #Subject(ID), 
     Grade NVARCHAR(50), GradeText NVARCHAR(50)) 

INSERT INTO #Subject (Name) VALUES 
(N'Maths'), 
(N'Physics'), 
(N'English') 

INSERT INTO #Student (Name) VALUES 
(N'Joe'), 
(N'Tom'), 
(N'Sally'), 
(N'Fred'), 
(N'Kim') 

INSERT INTO #Grade 
    ( StudentID, SubjectID, Grade, GradeText) VALUES 
(1,1,'Current','A'), 
(2,3,'Expected','C'), 
(3,2,'Mid','F'), 
(4,1,'Final','B'), 
(5,2,'Pre','C'), 
(2,3,'Start','A'), 
(3,1,'Current','A'), 
(1,2,'Expected','B'), 
(4,1,'Final','D'), 
(5,3,'Mid','E') 

SELECT * FROM #Student 
SELECT * FROM #Subject 
SELECT * FROM #Grade 

: 샘플 데이터를 참조하십시오. 즉, 현재, 최종 나는 관련된 성적을 가진 자신의 기둥으로 만들어지기를 원하지만, 다른 사람들은 중요하지 않은 것처럼 목록에 올릴 수 있습니다. 이것은 매우 간단한 예이며, 함께 작업하는 데이터는 훨씬 더 복잡합니다.

중요한 항목을 고유 한 열로 지정하고 다른 데이터를 보통대로 나열하도록 지정하는 방법입니까? 또한 필자가 보았던 모든 피벗 예제는 한 테이블에서 쿼리하고 있습니다. 쿼리에 많은 조인이있을 때 어떤 일이 발생합니까?

+0

감사합니다 (I 화면에 더 잘 맞는 몇 가지 그것을 청소했습니다). 이 데이터의 예상 결과는 무엇입니까? –

답변

1

은이 같은 것을 목표로 : 샘플 데이터

;with x as (
    select * 
    from (
     select StudentID, SubjectID, Grade, GradeText, Grade as grade_1, GradeText as GradeText_1 
      from (
      select * 
      from #Grade 
     ) as x 
    ) as source 
    pivot (
     max(GradeText_1) 
     for Grade_1 in ([Current], [Final]) 
    ) as pvt 
) 
select sub.Name as Subject, st.Name as Student, Grade, GradeText, [Current], Final 
from x 
inner join #Subject sub on x.SubjectID = sub.ID 
inner join #Student st on x.StudentID = st.ID 
+0

그래, 그게 내가 쫓아 다니는거야. 이 상황에서 MAX 기능이 무엇을하는지 설명 할 수 있습니까? MAX는 단지 가장 높은 숫자를 선택합니까? 이 시나리오에서는 어떻게 적용됩니까? – jhowe

+0

이 컨텍스트에서는 NOOP로 간주합니다. 이는 행당 하나의 값입니다. (그럼에도 불구하고 복잡한 기능이 필요합니다) – dean

+0

NOOP가 무엇입니까 ?? – jhowe