簡體   English   中英

數據透視表給出錯誤的結果

[英]Pivot table giving wrong result

下面的代碼為我提供了結果集,如第一幅圖所示

  SELECT     dbo.tbStudent.Name, dbo.tbStudent.RegNo, dbo.tbFee.PID, dbo.tbFee.Purpose, dbo.tbFee.AmountPaid, dbo.tbFee.StudentID, dbo.tbFee.Date, dbo.tbFee.FeeID, 
                      dbo.tbFee.SemID, dbo.tbFee.CourseID, dbo.tbFee.ModeOfPayment, dbo.tbFee.CheckNo, dbo.tbFee.DDNo, dbo.tbFee.HostelDDNo, dbo.tbFee.FRID, 
                      dbo.tbStudent.Parentage, dbo.tbCourse.Name AS Course, ISNULL(dbo.tbSemester.SemName, ' + @st +') AS Semester
FROM         dbo.tbFee INNER JOIN
                      dbo.tbStudent ON dbo.tbFee.StudentID = dbo.tbStudent.StudentID INNER JOIN
                      dbo.tbCourse ON dbo.tbFee.CourseID = dbo.tbCourse.CourseID LEFT OUTER JOIN
                      dbo.tbSemester ON dbo.tbFee.SemID = dbo.tbSemester.SemID  Where tbFee.SemID=1 

第一張圖片

但是使用數據透視表我需要如下結果:

在此處輸入圖片說明

我的數據透視表代碼是:

SET @values = '';
 If(@SemID=0)
    BEGIN
        SELECT @values = @values +'['+ CAST(PurPose AS varchar(max))+ ']' + ','
        FROM tbFee Where CourseID=@CourseID
        SET @values = SUBSTRING(@values, 1, Len(@values) - 1)
    END
ELSE
    BEGIN
        SELECT @values = @values +'['+ CAST(PurPose AS varchar(max))+ ']' + ','
        FROM tbFee Where SemID=@SemID
        SET @values = SUBSTRING(@values, 1, Len(@values) - 1)
    END

 Declare @st nvarchar(max)
 set @st='''Not Available''';
 declare @q nvarchar(max)
set @q = '
 Select * from(

SELECT     dbo.tbStudent.Name, dbo.tbStudent.RegNo, dbo.tbFee.PID, dbo.tbFee.Purpose, dbo.tbFee.AmountPaid, dbo.tbFee.StudentID, dbo.tbFee.Date, dbo.tbFee.FeeID, 
                      dbo.tbFee.SemID, dbo.tbFee.CourseID, dbo.tbFee.ModeOfPayment, dbo.tbFee.CheckNo, dbo.tbFee.DDNo, dbo.tbFee.HostelDDNo, dbo.tbFee.FRID, 
                      dbo.tbStudent.Parentage, dbo.tbCourse.Name AS Course, ISNULL(dbo.tbSemester.SemName, ' + @st +') AS Semester
FROM         dbo.tbFee INNER JOIN
                      dbo.tbStudent ON dbo.tbFee.StudentID = dbo.tbStudent.StudentID INNER JOIN
                      dbo.tbCourse ON dbo.tbFee.CourseID = dbo.tbCourse.CourseID LEFT OUTER JOIN
                      dbo.tbSemester ON dbo.tbFee.SemID = dbo.tbSemester.SemID  Where tbFee.SemID=1  
          ) as x
          pivot (
    max(AmountPaid)
    for Purpose in (' + @values + ')
) as pvt
'

exec (@q)

由於行數可以更改,因此我在@values中獲得了目的列的值。 但是,而不是獲得具有相同regNo的同一學生的單行結果,我得到的是以下結果:

但是我得到的是以下內容:

在此處輸入圖片說明

在PIVOT的源查詢中,您僅應指定實際數據透視表中涉及的那些列,即dbo.tbStudent.Name, dbo.tbStudent.RegNo, dbo.tbFee.Purpose, dbo.tbFee.AmountPaid

SELECT     
dbo.tbStudent.Name, 
dbo.tbStudent.RegNo,
dbo.tbFee.Purpose, 
dbo.tbFee.AmountPaid
FROM         
dbo.tbFee 
INNER JOIN dbo.tbStudent ON dbo.tbFee.StudentID = dbo.tbStudent.StudentID 
INNER JOIN dbo.tbCourse ON dbo.tbFee.CourseID = dbo.tbCourse.CourseID 
LEFT OUTER JOIN dbo.tbSemester ON dbo.tbFee.SemID = dbo.tbSemester.SemID  
Where tbFee.SemID=1

如果存在除這些以外的任何其他列,它們將被納入數據透視計算中,並且您將因此獲得多行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM