2

の1つの列に複数の値を表示するにはどうすればよいGridViewですか?たとえば、で「Ivan」を検索するTextBoxと、出力は次のようにIvanの複数の行を返します。

名前タスク IvanTask1Ivan Task2
Ivan Task3

こんなもの欲しい

Task
Ivan Task1、Task2、Task3に名前を付けます

私のテーブルはこんな感じ

従業員(id、name)
タスク(id、name)
EmployeeTask(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 クエリを変更する必要があります。

于 2012-06-20T23:22:42.530 に答える
0

新しいクラスを作成します。

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

EmployeeWithTask list. を作成します。タスクのリストを取得した後、結果ループ内の個別の従業員ごとに結果をループし、 EmployeewithTask のインスタンスを 1 つ作成します。最後に、EmployeeWithTask リストをグリッドビューにバインドします

于 2012-06-21T13:12:26.010 に答える
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

オラクルの場合:

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

SQL Serverではわかりませんが、役立つと思います。

類似タイプの質問、参照してください

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

mssqlサーバー2008を使用している場合は、質問で述べたのと同じことを行うピボット関数の紹介があります

ピボットの使い方

お役に立てば幸いです

于 2012-06-21T01:59:06.407 に答える