我正在尝试填充Gridview,以便为每位学生启用checkbox
es,但这取决于此查询中的某些值:
@SelectedDate通过TextBox提供为仅日期
SELECT v1.StudentID,
v1.StudentPreferredName + ' ' + v1.StudentFamilyName AS StudentName,
bcs.CheckStatusName,
rce.DateSubmitted,
rcp.RollCallPeriod
FROM tblBoardingRollCallEntries AS rce
INNER JOIN vwBoardingTenants AS v1
ON v1.StudentID = rce.StudentID
AND v1.[Year] = YEAR(@SelectedDate)
INNER JOIN tblBoardingCheckStatus AS bcs
ON bcs.CheckStatusID = rce.CheckStatusID
AND bcs.StatusActive = 1
INNER JOIN tblBoardingRollCallPeriods AS rcp
ON rcp.RollCallPeriodID = rce.RollCallPeriodID
AND rcp.PeriodYear = YEAR(@SelectedDate)
AND @SelectedDate BETWEEN rcp.PeriodStart AND rcp.PeriodEnd
AND rcp.RowStatus = 1
WHERE dbo.fnDateOnly(rce.DateSubmitted) = dbo.fnDateOnly(@SelectedDate)
我的网格视图:
显示以下内容:
数据:
我希望基本上能够将GridView
中的行压缩为每行一个学生,并根据RollCallPeriod
文本勾选复选框。
我正在玩SQL枢轴,以使数据尽可能接近我所追求的,以避免代码隐藏等。但是,我无法让它工作。
select StudentID, [1],[10],[2],[3],[4],[5],[6],[7],[8],[9]
from
(
select StudentID, RollCallID, CheckStatusID
from tblBoardingRollCallEntries
unpivot
(
value for name in ([RollCallID],[StudentID],[CheckStatusID],[DateSubmitted],[StaffID])
) unpiv
) src
pivot
(
sum(RollCallPeriodID)
for RollCallPeriodID in ([1],[10],[2],[3],[4],[5],[6],[7],[8],[9])
) piv
我收到以下错误:
查找错误 - SQL Server数据库错误:列的类型 " StudentID"与在。中指定的其他列的类型冲突 UNPIVOT清单。
还有其他想法吗?
由于
答案 0 :(得分:1)
两个选项:
shipping_hidden_tax_amount
上进行展开:首先选择在派生表中强制转换为base_shipping_hidden_tax_amnt
类型的列,然后shipping_incl_tax
派生表。缩短的例子:base_shipping_incl_tax
gift_message_id
进行取消转储,这样就可以UNPIVOT将列直接转换为适当的类型。答案 1 :(得分:1)
根据您的实际数据,您可以通过以下两种方式执行此操作。
这会为CheckStatusName
RollCallPeriod
作为值
SELECT *
FROM (
SELECT StudentName,
CheckStatusName,
RollCallPeriod
FROM [YourQueryGoesHere]
) t
PIVOT (
MAX(CheckStatusName)
FOR RollCallPeriod IN ([6:15 AM],[8:00 AM],[3:00 PM],[6:00 PM],[9:00 PM])
) p
或者您获得状态并显示COUNT()
以显示该学生是否具有该CheckStatusName, RollCallPeriod
SELECT *
FROM (
SELECT StudentName,
CheckStatusName,
RollCallPeriod
FROM [YourQueryGoesHere]
) t
PIVOT (
COUNT(RollCallPeriod)
FOR RollCallPeriod IN ([6:15 AM],[8:00 AM],[3:00 PM],[6:00 PM],[9:00 PM])
) p