T-sql 行转换成列

wo2xie 2009-10-12 04:31:13
请问:
DECLARE @doc xml
set @doc=(select Fxml from 订单产品记录表 where FID='06cb85ec-57fe-4554-a657-1e666cc590b4')
--上面那句话是取出一个XML字段的数据,数据如下("<root><user level='01'><game type='1' member='user'><item type='UserLimit'>abcd</item><item type='UserLimit2'>dfsdafds</item><item type='UserLimit3'>5</item></game></user></root>";)

select @doc

declare @up Table
(
feldkey varchar(127),
feldvalue varchar(127)
)
insert @up
SELECT cast(订单产品记录表.c.value('@type','varchar(127)') as varchar(127)) AS feldkey,
cast(订单产品记录表.c.query('text()') as varchar(127)) AS feldvalue
FROM @doc.nodes('(/root/user/game/item)') 订单产品记录表(c)


declare @set varchar(8000)
select @set=isnull(@set+',','') + a.feldkey from (
select cast(订单产品记录表.c.value('@type','varchar(200)') as varchar(2000)) AS feldkey, --节点属性
cast(订单产品记录表.c.query('text()') as varchar(2000)) AS feldvalue --节点值
FROM @doc.nodes('(/root/user/game/item)') 订单产品记录表(c)) a



SELECT * FROM (select * from @up) as t PIVOT (count(feldvalue) FOR feldkey IN (@set)) Alias

报错:必须声明标量变量 "@set"。或必须声明标量变量@up
...全文
70 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wo2xie 2009-10-13
  • 打赏
  • 举报
回复
Thank you 各位 跟贴,在下明白了.
liangCK 2009-10-12
  • 打赏
  • 举报
回复
Create Table #up 
(
feldkey varchar(127),
feldvalue varchar(127)
)
insert #up (feldkey,feldvalue)
SELECT 订单产品记录表.c.value('@type','varchar(127)') AS feldkey,
订单产品记录表.c.value('.','varchar(127)') AS feldvalue
FROM @doc.nodes('(/root/user/game/item)') 订单产品记录表(c)


declare @set varchar(8000)
select @set=isnull(@set+',','') + feldkey from #up group by feldkey;

exec('select * from #up pivot(count(feldvalue) for feldkey in('+@set+')) as pvt')

drop table #up
dawugui 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liangck 的回复:]
动态SQL的话,用临时表,而不用表变量.
[/Quote]哦,对.
liangCK 2009-10-12
  • 打赏
  • 举报
回复
动态SQL的话,用临时表,而不用表变量.
dawugui 2009-10-12
  • 打赏
  • 举报
回复
exec('SELECT * FROM (select * from '+ @up + ' as t PIVOT (count(feldvalue) FOR feldkey IN ( ''' + @set + ''')) Alias')
xiequan2 2009-10-12
  • 打赏
  • 举报
回复
要用动态SQL.
--小F-- 2009-10-12
  • 打赏
  • 举报
回复
exec 来执行动态语句
liangCK 2009-10-12
  • 打赏
  • 举报
回复
FOR feldkey IN (@set)) Alias

要用动态SQL.
华夏小卒 2009-10-12
  • 打赏
  • 举报
回复
表名,字段名动态,要用动态语句

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧