MYSQL数据库X里str字段存储了下面的XML字符串,格式如下
<agencyOrg>
<comCode />
<businessOffice>
<row>
<nodeLevel>5</nodeLevel>
<id>5</id>
<orgCode>orgCode5</orgCode>
</row>
<row>
<nodeLevel>4</nodeLevel>
<id>4</id>
<orgCode>orgCode4</orgCode>
</row>
<row>
<nodeLevel>3</nodeLevel>
<id>3</id>
<orgCode>orgCode3</orgCode>
</row>
<row>
<nodeLevel>2</nodeLevel>
<id>2</id>
<orgCode>orgCode2</orgCode>
</row>
<row>
<nodeLevel>1</nodeLevel>
<id>1</id>
<orgCode>orgCode1</orgCode>
</row>
</businessOffice>
</agencyOrg>
我想实现两个结果,
1.按照nodeLevel顺序从1至5拼装orgCode
实现效果为orgCode1_orgCode2_orgCode3_orgCode4_orgCode5
2.查找nodeLevel为2所对应的orgCode2
按照目前只能获取全部的orgCode
select extractValue(str,'/agencyOrg/businessOffice/row/orgCode')orgCode from x
结果是:orgCode5_orgCode4_orgCode3_orgCode2_orgCode1
是按照目前的字段顺序一一列出的
麻烦 大神进行指导,谢谢
没园豆了,不好意思
select extractValue(a.str,'/agencyOrg/businessOffice/row/')orgCode from
(select str,extractValue(str,'/agencyOrg/businessOffice/row/')nodeLevel as nodeLevel form x order by nodeLevel asc) as a
谢谢你的回复,抱歉我写的应该是select extractValue(str,'/agencyOrg/businessOffice/row/orgCode')orgCode from x
这个是一个字段,其内部是无法排序的,两个结果主要是如何按照nodeLevel 的层级来取值,
按照你的写法sql无法执行,nodeLevel 作为别名只能用在外面的排序
@御风苍狼:
select extractValue(a.str,'/agencyOrg/businessOffice/row/orgCode') orgCode from
(select str,extractValue(str,'/agencyOrg/businessOffice/row/nodeLevel') nodeLevel form x order by nodeLevel asc) as a
我既不会 sql,也不会 xml query,我就是看你的语法,先用你的 nodeLevel 排序,要排序,首先得从 xml 选出 nodeLevel,然后我看了你的语句,又分析了下 nodeLevel 同 orgCode 具有相似特征,所以就照着你的语句写了个按照 nodeLevel 将查询出的 str 排序的语句,然后从这个查询的结果集中,再去用你的语句查询 orgCode。
语法可能有错误,我想你比我更懂 sql 吧(居然还会 xml query!),你自己稍微改改吧!反正我就这么个思路,我觉得解题的思路没啥问题,即使放到 LINQ 中它也是正确的。
@Launcher:
order排序是针对多个字段进行排序,目前extractValue(str,'/agencyOrg/businessOffice/row/nodeLevel') 是一个字段,是要处理这个字段内部的事情,与其他字段无关
@御风苍狼: 你要的是这个:http://msdn.microsoft.com/zh-cn/library/ms190945.aspx
加上排序就O了吧,1L正解