簡體   English   中英

在SQL中,如何使用位值?

[英]In SQL, how do I pivot on a bit value?

以下查詢旨在為給定班級中的每個學生創建出勤歷史記錄。 學生表包含ID,名稱和學術詳細信息,而注冊表僅包含四列:ID,StudentID,時間(日期時間)和當前(位)。 該表本身可以正常工作,並將位值轉換為整數,所以我得到:

Jim Monday 1
Jim Tuesday 0
Sally Monday 1
Sally Tuesday 1

但是,當使用下面的代碼進行旋轉時,每個瞳孔的所有值都顯示為NULL:

Name Monday Tuesday
Jim Null Null
Sally Null Null

當我想要這個時:

Name Monday Tuesday
Jim 1 0
Sally 1 1

也許我凝視它已經太久了。 我真的很感謝您的幫助。 謝謝!

DECLARE @cols AS NVARCHAR(MAX), @query  AS NVARCHAR(MAX) 

select @cols = STUFF(  (SELECT ',' + QUOTENAME(Register.Time)
FROM Register INNER JOIN Pupil on Register.StudentID = Pupil.StudentID 
WHERE Pupil.GroupDesignation = 'ClassDesignationGoesHere' 
GROUP BY Register.Time ORDER BY Register.Time ASC 
FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 

set @query = 'SELECT FName, SName, ' + @cols + ' FROM 
( 
SELECT Pupil.FName, Pupil.SName,  CAST(Present AS TINYINT) AS INTPresent, Register.Time  
FROM Register INNER JOIN Pupil ON Register.StudentID = Pupil.StudentID  
WHERE Pupil.GroupDesignation = ''ClassDesignationGoesHere''  
) x 
PIVOT (MAX(INTPresent) for Time in (' + @cols + ') ) p '  execute(@query)

您不能在Maxmin運算符中使用數據類型bit

您需要將其轉換為Pivot源查詢中的Int

SELECT *
FROM   (SELECT NAME,
               dates,
               CONVERT(INT, flag) flag
        FROM   result)a
       PIVOT (Max(flag)
             FOR dates IN([Monday],
                          [Tuesday])) piv 

希望您可以將其轉換為Dynamic pivot

SQLFIDDLE演示

暫無
暫無

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

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