[英]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)
您不能在Max
或min
運算符中使用數據類型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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.