Sql server 使用FLWOR XQuery返回多个XML节点和自定义父标记

Sql server 使用FLWOR XQuery返回多个XML节点和自定义父标记,sql-server,xml,xquery,xquery-sql,flwor,Sql Server,Xml,Xquery,Xquery Sql,Flwor,我需要使用FLWOR表达式获得以下输出 <oldPlanes> <make>Cessna</make> <model>Centurian</model> <make>Piper</make> <model>Tripacer</model> </oldPlanes> 塞斯纳 百人队长号 风笛手 Tripacer 使用 CREATE TABLE XMLO1 (

我需要使用FLWOR表达式获得以下输出

<oldPlanes>
  <make>Cessna</make>
  <model>Centurian</model>
  <make>Piper</make>
  <model>Tripacer</model>
</oldPlanes>

塞斯纳
百人队长号
风笛手
Tripacer
使用

CREATE TABLE XMLO1 (xDoc XML NOT NULL)

INSERT INTO XMLO1 VALUES ('
 <planes>
   <plane>
     <year>1977</year>
     <make>Cessna</make>
     <model>Skyhawk</model>
     <color>Light blue and white</color>
   </plane>
   <plane>
     <year>1975</year>
     <make>Piper</make>
     <model>Apache</model>
     <color>White</color>
   </plane>
   <plane>
     <year>1960</year>
     <make>Cessna</make>
     <model>Senturian</model>
     <color>Yellow and White</color>
   </plane>
   <plane>
     <year>1956</year>
     <make>Piper</make>
     <model>ripacer</model>
     <color>Blue</color>
   </plane>
 </planes>')
创建表XMLO1(xDoc XML不为空)
在XMLO1值中插入('
1977
塞斯纳
天鹰
浅蓝色和白色
1975
风笛手
阿帕奇
白色
1960
塞斯纳
森图里安
黄与白
1956
风笛手
里帕克尔
蓝色
')
我尝试了下面的查询

SELECT xDoc.query('for $p in //plane
                    let $x:=$p/year
                    where $x < 1970
                    return <oldPlanes><make>{data($p/make)}</make> 
                           </oldPlanes>
                    ')
FROM XMLO1
选择xDoc.query(//平面中的$p
假设$x:=$p/年
其中,$x<1970
返回{data($p/make)}
')
来自XMLO1
这并没有给出查找
年份<1970
所在平面的预期输出

如何将自定义父节点设置为


如何返回2个节点作为预期输出?

您只想创建一个
oldPlanes
元素,因此其构造需要在FLWOR表达式之外:

<oldPlanes>{for $p in //plane
            let $x:=$p/year
            where $x < 1970
            return $p/(make, model)}</oldPlanes>
{用于//平面中的$p
假设$x:=$p/年
其中,$x<1970
返回$p/(品牌,型号)}
除了完全不需要FLWOR之外,简单的路径表达式可以完成这项工作:

<oldPlanes>{//plane[year < 1970]/(make, model)}</oldPlanes>
{//plane[年份<1970]/(品牌、型号)}

谢谢@Michael。我能够获得如下所示的所需输出<代码>从XMLO1中选择xDoc.query('let$planes:=planes/plane return{for$x in$planes,其中$x/year<1970 return($x/make,$x/model)}')您也能帮我一下吗