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
*/
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
*/
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 行受影响)*/
--调整一下,比较好看些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)
这个ID真NND强大..我每次看都错..以为是你..
2:如何使用XML的 nodes方法
3:如何使用XML的value方法
4:如何使用XQUERY的处理函数(这里用到的是MAX统计函数)
5:如何使用XPATH表达式
6:如何使用表达式的限定符
7:如何学习楼主做个好人 ......
http://www.windbi.com/showtopic-1466.aspx对某些东西,看来很多人都会有同样或相似的想法