declare @t table(Sname nvarchar(5),  V1 float,    V2 float,    V3 float,      V4 float,    V5 float,      V6 float) 
insert @t select N'张三',    0.11 , 0.21 , 0.29,  0.32 ,   0.11,    0.08 
insert @t select N'李四',    0.01 , 0.61 , 0.21,  0.73 ,   0.21,    0.12 
insert @t select N'张五',    0.31 , 0.21 , 0.23,  0.33 ,   0.91,    0.65 
insert @t select N'张六',    0.59 , 0.11,  0.26,  0.13,    0.01,    0.15 select b.* from
(select x=cast((select * from @t for xml path('r')) as xml)) a
cross apply
(
select name=x.query('./Sname/text()'),v=x.query('max(./*[local-name(.)!="Sname"])') from a.x.nodes('//r') as t(x)
) b/*
张三 0.32
李四 0.73
张五 0.91
张六 0.59
*/

解决方案 »

  1.   

    偶也刚看了两天xml那章..只会这么弄..declare @t table(Sname nvarchar(5),  V1 float,    V2 float,    V3 float,      V4 float,    V5 float,      V6 float) 
    insert @t select N'张三',    0.11 , 0.21 , 0.29,  0.32 ,   0.11,    0.08 
    insert @t select N'李四',    0.01 , 0.61 , 0.21,  0.73 ,   0.21,    0.12 
    insert @t select N'张五',    0.31 , 0.21 , 0.23,  0.33 ,   0.91,    0.65 
    insert @t select N'张六',    0.59 , 0.11,  0.26,  0.13,    0.01,    0.15 SELECT b.*
    FROM
    (
       SELECT x=
       CAST((  SELECT Sname AS 'Sname',
           V1 AS 'S/V1',
           V2 AS 'S/V2',
           V3 AS 'S/V3',
           V4 AS 'S/V4',
           V5 AS 'S/V5',
           V6 AS 'S/V6'
       FROM @t
       FOR XML PATH('stu'),ROOT('students'),TYPE) AS XML)
    ) AS t
    CROSS APPLY
    (
       SELECT c.value('(./Sname)[1]','varchar(20)') AS Sname,
              c.query('max(./S/*)') AS maxValue
       FROM x.nodes('/students/stu') AS T(c)
    ) AS b/*
    Sname                maxValue
    -------------------- -------------------
    张三                   0.32
    李四                   0.73
    张五                   0.91
    张六                   0.59(4 行受影响)*/
      

  2.   

    这样弄也可以,只是当一个表中有上百列要聚合时一行行写麻烦了。所以用动态语句或者用xpath来完成
      

  3.   


    --调整一下,比较好看些declare @t table(Sname nvarchar(5),  V1 float,    V2 float,    V3 float,      V4 float,    V5 float,      V6 float) 
    insert @t select N'张三',    0.11 , 0.21 , 0.29,  0.32 ,   0.11,    0.08 
    insert @t select N'李四',    0.01 , 0.61 , 0.21,  0.73 ,   0.21,    0.12 
    insert @t select N'张五',    0.31 , 0.21 , 0.23,  0.33 ,   0.91,    0.65 
    insert @t select N'张六',    0.59 , 0.11,  0.26,  0.13,    0.01,    0.15 ;with cte as
    (
    select
      col = convert(xml,(
    select 
    *
    from @t
    for xml path('root')))
    )select
    Sname = t.c.value('(./Sname)[1]','varchar(10)'),
    Float_value = t.c.value('max(./*[local-name(.)!="Sname"])','float')
    from cte
    cross apply col.nodes('root') t(c)
      

  4.   


    这个ID真NND强大..我每次看都错..以为是你..
      

  5.   

    学习点:1:如何使用FOR XML构造XML数据
    2:如何使用XML的 nodes方法
    3:如何使用XML的value方法
    4:如何使用XQUERY的处理函数(这里用到的是MAX统计函数)
    5:如何使用XPATH表达式
    6:如何使用表达式的限定符
    7:如何学习楼主做个好人 ......
      

  6.   

    今天无意中在这里也看到了,利用这种方式 
    http://www.windbi.com/showtopic-1466.aspx对某些东西,看来很多人都会有同样或相似的想法