如何连接数据输出分隔值?

时间:2013-01-16 12:03:33

标签: asp.net sql gridview csv concatenation

我正在创建一个视图,用作矩阵报表,将各个表中的行数据显示为列。我认为它可以通过连接实现这一点,但我有点卡住了。我的查询工作非常好但是我使用的是反转的数据表(数据透视表),它显示在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"

有什么想法吗?

0 个答案:

没有答案