2

如何在 a 的单列中显示多个值GridView?例如,当我在 中搜索“Ivan”时TextBox,输出将返回多行 Ivan,如下所示:

名称 任务
Ivan Task1
Ivan Task2
Ivan Task3

我想要这样的东西

命名任务
Ivan Task1、Task2、Task3

我的表是这样的

员工(id,name)
任务(id,name)
员工任务(employee.id,task.id)

这是我的sql代码

SELECT  e.name,  t.name
FROM EmployeeTask et
INNER JOIN employee e ON e.id = et.employee_id
INNER JOIN task t ON t.id = et.task_id
WHERE e.name = @Name

这是我的GridView标记

<Columns>
    <asp:BoundField DataField="name" HeaderText="Name" SortExpression="name"/>
    <asp:BoundField DataField="task" HeaderText="Task" SortExpression="task"/>        
</Columns>
4

6 回答 6

1

在纯 SQL 中,这是一种获得所需结果的方法,然后您可以将其输入 GridView:

SELECT     e.name, REPLACE(REPLACE(REPLACE
                          ((SELECT     t.name
                              FROM         EmployeeTask AS et INNER JOIN
                                                    task AS t ON t.id = et.task_id
                              WHERE     (et.employee_id = e.id)
                              FOR XML RAW(''), ELEMENTS)
                   , '</name><name>', ', '), '<name>', ''), '</name>', '') AS EmployeeTasks
FROM         employee AS e
WHERE     (e.name = @Name)

本质上,它是一个子查询,将任务扁平化为 XML 输出,然后用逗号替换标签。

于 2012-06-20T23:18:18.227 回答
1

您必须更改您的 SQL 查询。

  • 如果你使用 MySQL,你可以使用 group_concat。
  • 如果您使用的是 MSSQL,您可以在这里找到答案
于 2012-06-20T23:22:42.530 回答
0

您需要使用类似这样的 SQL 连接任务名称,请注意我没有测试过脚本

    DECLARE @CTasks VARCHAR(500)
    SET @CTasks = ''

    SELECT @CTasks = @CTasks  + t.Task + ', ' FROM Employee e
    INNER JOIN Tasks t ON t.EmployeeId = e.Id
    WHERE e.Name = @Name
    ORDER BY e.Name ASC

    IF LEN(@CTasks) > 0
    SELECT @Name As Name, @CTasks As Tasks

You might end up getting a ',' at the end that needs taking care from Tasks column

Hope this helps...
于 2012-06-21T00:12:43.213 回答
0

如果您使用的是 mssql server 2008,那么将介绍枢轴函数,它与您在问题中提到的相同

如何使用枢轴

希望对您有所帮助

于 2012-06-21T01:59:06.407 回答
0

在甲骨文中:

select name,wm_concat(task) as task from table name group by name

我不知道在 sql Server.But 我认为它可以帮助你。

类似类型的问题,看看

在 Sql 中:

SELECT Field1, Substring(Field2, 2, LEN(Field2)) AS Field2 FROM
(
    SELECT
        [InnerData].Field1,
        (SELECT  ',' + Field2 FROM @Fields WHERE Field1=[InnerData].Field1 FOR XML PATH('')) AS Field2
        FROM
        (
            SELECT DISTINCT Field1 FROM @Fields
        ) AS [InnerData]
) AS OuterData

我从下面的链接得到这个查询

参考这个链接

于 2012-06-21T05:36:30.127 回答
0

创建一个新类:

Class EmployeeWithTask{ string employeeName{get;set} list<string>employeeTasks {get,set}}

创建一个 EmployeeWithTask 列表。在检索任务列表后,对于结果循环中的每个不同员工,遍历结果并创建一个 EmployeewithTask 实例。最后将 EmployeeWithTask 列表绑定到您的 gridview

于 2012-06-21T13:12:26.010 回答