情况如下:
SRNo(PK)  vtype(PK) vclass(PK) Node(PK)  SeqNo(PK)    Person    Way
46          04         05        1         1           王东      审批:串行   
46          04         05        2         1           张强      审批:串行
46          04         05        3         1           陈斌      审批:并行
46          04         05        3         2           李平      审批:并行
46          04         05        4         1           张强      通知
46          04         05        4         2           陈斌      通知
46          04         05        4         3           李平      通知
这样的一个情况,想实现最后在GridView中显示:
1    审批:串行    王东
2    审批:串行    张强
3    审批:并行    陈斌,李平
4    通知         张强,陈斌,李平
不用GridView也可以,不知道如何通过SQL语句来取数据加以实现!~~
恳请相助!~~

解决方案 »

  1.   

    用sql选出所有数据 fill进一个datatable 然后在new另外一个datatable 自己构造想要的列,把第一个datatable的内容自己用循环组合加工放到第二个datatable里面,然后gridview的datasource设为第二个datatable,databind()
    我只能想到这样 ,丢人了 掩面跑走。。
      

  2.   

    先用视图把Node(PK) 用 SeqNo(PK) 进行group by SeqNo(PK),
    再通过视图去取数据
      

  3.   

    个人觉得还是不要用sql来做,太麻烦了,你用gridview的合并不行吗
      

  4.   

    我也知道麻烦,所以想问问有没有好点的方法..GridView的合并不行,我还要在GridView上进行编辑和修改!~~~比如添加删除编辑一些人,或者是改一下审批方式等等!~~
      

  5.   

    --> 测试数据: [t]
    if object_id('[t]') is not null drop table [t]
    create table [t] ([SRNo] int,[vtype] varchar(2),[vclass] varchar(2),[Node] int,[SeqNo] int,[Person] varchar(4),[Way] varchar(9))
    insert into [t]
    select 46,'04','05',1,1,'王东','审批:串行' union all
    select 46,'04','05',2,1,'张强','审批:串行' union all
    select 46,'04','05',3,1,'陈斌','审批:并行' union all
    select 46,'04','05',3,2,'李平','审批:并行' union all
    select 46,'04','05',4,1,'张强','通知' union all
    select 46,'04','05',4,2,'陈斌','通知' union all
    select 46,'04','05',4,3,'李平','通知'select * from [t]Go
    --合并处理函数
    CREATE FUNCTION f_str(@col1 varchar(10))
    RETURNS varchar(100)
    AS
    BEGIN
        DECLARE @re varchar(100)
        SET @re=''
        SELECT @re=@re+','+CAST([Person] as varchar)
        FROM [t]
        WHERE Node=@col1
        RETURN(STUFF(@re,1,1,''))
    END
    GO
    --调用函数
    SELECT Node,way,[Person]=dbo.f_str(Node) FROM [t] GROUP BY node,way
    --删除测试
    DROP TABLE [t]
    DROP FUNCTION f_str
    /*--结果
    (7 行受影响)
    SRNo        vtype vclass Node        SeqNo       Person Way
    ----------- ----- ------ ----------- ----------- ------ ---------
    46          04    05     1           1           王东     审批:串行
    46          04    05     2           1           张强     审批:串行
    46          04    05     3           1           陈斌     审批:并行
    46          04    05     3           2           李平     审批:并行
    46          04    05     4           1           张强     通知
    46          04    05     4           2           陈斌     通知
    46          04    05     4           3           李平     通知(7 行受影响)Node        way       Person
    ----------- --------- --------------------
    1           审批:串行     王东
    2           审批:串行     张强
    3           审批:并行     陈斌,李平
    4           通知        张强,陈斌,李平(4 行受影响)
    --*/
      

  6.   

    SELECT * FROM(SELECT DISTINCT Node,way FROM [t])A
    OUTER APPLY(SELECT 
    [Person]= STUFF(REPLACE(REPLACE((
    SELECT [Person] FROM [t] N WHERE Node = A.Node
    FOR XML AUTO),'<N Person="',','),'"/>', ''), 1, 1, ''))N
    /*
    (7 行受影响)Node        way       Person
    ----------- --------- ---------------
    1           审批:串行     王东
    2           审批:串行     张强
    3           审批:并行     陈斌,李平
    4           通知        张强,陈斌,李平
    */