我正在创建一个视图作为矩阵报告,它将来自各种表的行数据显示为列。我认为它可以通过连接来实现这一点,但我有点卡住了。我的查询效果很好,但是我使用的是显示在网格视图中的反转数据表(数据透视表),而我目前得到的是我所有的多个值都在每个单元格中相加!
Set Name James Smith Jones
Training 1 9 5 7
Training 2 5 7 8
Training 3 12 10 9
这就是我想要输出的!
Set Name James Smith Jones
Training 1 3,1,2,3 2,3 5,2
Training 2 4,1 1,1,5 2,2,2,2
Training 3 1,4,4,3 2,2,2,4 1,3,2,3
我在用户和培训之间建立了多对多的关系,因为一个用户可以在特定时间段内进行许多具有多种结果的培训实例。
此userProfilesTbl
表存储来自 ASP.NET 成员、角色和配置文件表的其他用户信息。
• PK UserId (int)
• StaffNo (varchar)
• forename (varchar)
• surname (varchar)
• FK st_id (int)
此storeTbl
表引用组中的所有商店
• PK st_id (int)
• store (varchar)
• storeNo (varchar)
• FK d_id (int)
该shiftTbl
表引用了不同的班次模式
• PK wa_id (int)
• Shift (varchar)
该userAssessmentTbl
表包含与用户、进行的培训和培训的结果有关的信息。o_id 只能是一个值 1、2、3 或 4
• PK ti_id (int)
• FK UserId (UID)
• FK tt_id (int)
• o_id (int)
• n_id (int)
此setTbl
表是每个培训课程的名称
• PK s_id (int)
• setName (varchar)
• instruction (varchar)
• link (varchar)
• setNo (int)
这是我的 sql 查询字符串,如果我LEFT JOIN
使用下面的 SQL 在表上执行 plain 's,我将得到与一个人相关的几行:
Dim query As String = "SELECT *
FROM userProfilesTbl
LEFT JOIN storeTbl ON userProfilesTbl.st_id = storeTbl.st_id
LEFT JOIN shiftTbl ON userProfilesTbl.wa_id = shiftTbl.wa_id
LEFT JOIN userAssessmentTbl ON userProfilesTbl.UserId = userAssessmentTbl.UserId
LEFT JOIN trainingTbl ON userAssessmentTbl.tt_id = trainingTbl.tt_id
LEFT JOIN setsTbl ON trainingTbl.s_id = setsTbl.s_id
WHERE userProfilesTbl.st_id=@st_id
AND userProfilesTbl.wa_id=@wa_id
AND DATEPART(mm,t_date) = @m_date
AND DATEPART(yyyy,t_date) = @y_date
ORDER BY surname ASC"
有任何想法吗?