0

我正在创建一个视图作为矩阵报告,它将来自各种表的行数据显示为列。我认为它可以通过连接来实现这一点,但我有点卡住了。我的查询效果很好,但是我使用的是显示在网格视图中的反转数据表(数据透视表),而我目前得到的是我所有的多个值都在每个单元格中相加!

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"

有任何想法吗?

4

0 回答 0