2012-08-30 19 views
1

我想我的桌子水平旋轉 -無法執行查詢分組

的表如下所示:

Master_Choicecode

ChoiceCode  MainCourseId CourseLevelId InstituteId 

Master_MainCourse

MainCourseId  MainCourseName CourseLevelId CourseProgram 
    11    x    1    abc 
    12    y    2    xyz 

Master_CourseLevel

CourseLevelId CourseLevelName  
    1    deg 
    2    Dip 

Master_Institute

Instituteid  InstituteName Statusid 
    1001   Insti1   100 
    1002   Insti2   200 

Master_InstituteStatus

StatusId StatusName 
    100   Status1 
    200   Status2 

現在使用所有這些表我想說明這一點:

CourseProgram CourseLevelName Status1(from Master_InstituteStatus)  Status2(from Master_InstituteStatus)  
    abc    Deg   Count of institutes belonging to status1 Count of institutes belonging to status2 

現在,這是我曾嘗試:

SELECT B.CourseProgram,C.CourseLevelName, 
case when E.InstituteStatusName =' Status1' then COUNT(*) else null end as  Status1, 
case when E.InstituteStatusName =' Status2' then COUNT(*) else null end as Status2, 
FROM Master_ChoiceCode A 
inner join Master_MainCourse B on A.MainCourseID=B.MainCourseID 
inner join Master_CourseLevel C on A.CourseLevelID=C.CourseLevelID 
inner join Master_Institute D on A.InstituteID=D.InstituteID 
inner join Master_InstituteStatus1 E on D.InstituteStatusID1=E.InstituteStatusID 
where B.CourseLevelID IN(1,2) 
GROUP BY B.CourseProgram,A.CourseLevelID,C.CourseLevelName,E.InstituteStatusName 
order by B.CourseProgram,C.CourseLevelName; 

但是有了這個,我得到這樣的輸出:

CourseProgram CourseLevelName Status1(from Master_InstituteStatus)  Status2(from Master_InstituteStatus)  
    abc    Deg   Count of institutes belonging to status1 
    abc    Deg      Null        Count of institutes belonging to status1 

我得到的解決方案是使用旋轉......但我不KNW如何泥質我用透視我目前query.Please幫助我..

回答

1

你很近,但在E.InstituteStatusName上分組意味着你將無法將數據組合到一行上。您可以使用條件和來代替case聲明與count

SELECT B.CourseProgram,C.CourseLevelName, 
sum(case when E.InstituteStatusName =' Status1' then 1 else 0 end) as  Status1, 
sum(case when E.InstituteStatusName =' Status2' then 1 else 0 end) as Status2, 
FROM Master_ChoiceCode A 
inner join Master_MainCourse B on A.MainCourseID=B.MainCourseID 
inner join Master_CourseLevel C on A.CourseLevelID=C.CourseLevelID 
inner join Master_Institute D on A.InstituteID=D.InstituteID 
inner join Master_InstituteStatus1 E on D.InstituteStatusID1=E.InstituteStatusID 
where B.CourseLevelID IN(1,2) 
GROUP BY B.CourseProgram,A.CourseLevelID,C.CourseLevelName 
order by B.CourseProgram,C.CourseLevelName; 

這將有效地計算匹配該狀態的行,而不需要對該字段進行分組。

+0

哎感謝名單一lottt YAA ......它的工作:) –

1

你可以使用內置旋轉功能在SQL-服務器:

WITH CTE AS 
( SELECT B.CourseProgram, 
      C.CourseLevelName, 
      E.InstituteStatusName, 
      b.CourseLevelID 
    FROM Master_ChoiceCode A 
      INNER JOIN Master_MainCourse B 
       ON A.MainCourseID=B.MainCourseID 
      INNER JOIN Master_CourseLevel C 
       ON A.CourseLevelID=C.CourseLevelID 
      INNER JOIN Master_Institute D 
       ON A.InstituteID=D.InstituteID 
      INNER JOIN Master_InstituteStatus1 E 
       ON D.InstituteStatusID1=E.InstituteStatusID 
    WHERE B.CourseLevelID IN (1,2) 
) 
SELECT CourseProgram, CourseLevelName, [Status1], [Status2] 
FROM CTE 
     PIVOT 
     ( COUNT(CourseLevelID) 
      FOR InstituteStatusName IN ([Status1], [Status2]) 
     ) pvt 

ORDER BY CourseProgram, CourseLevelName; 
相關問題