我正在创建一个视图,用作矩阵报表,将各个表中的行数据显示为列。我认为它可以通过连接实现这一点,但我有点卡住了。我的查询工作非常好但是我使用的是反转的数据表(数据透视表),它显示在gridview中,而我目前得到的是我的多个值在每个单元格中加在一起!
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查询字符串,如果我使用下面的SQL对表进行简单的LEFT JOIN
,我将获得与一个人相关的几行:
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"
有什么想法吗?