Sql 在单个查询中从XML获取数据和条件

Sql 在单个查询中从XML获取数据和条件,sql,xml,tsql,xpath,xquery,Sql,Xml,Tsql,Xpath,Xquery,然后存储在局部变量中,然后使用条件语句计算相应的返回值 在从XML本身获取数据时,有什么方法可以做到这一点吗 我的意思是,在从@x本身选择性别时,我们必须使用条件语句返回最终值(即1、2或3) 这也将有助于消除局部变量/查询成本,这可以在一次获取中完成 以下是我必须从单个查询中获得的所需结果 SELECT @X.value('(Detail/Gender)[1]', 'varchar') as Gender 试试像这样的东西 Gender 1 或者使用目录表并将键(M、F、…)连接到任何映

然后存储在局部变量中,然后使用条件语句计算相应的返回值

在从XML本身获取数据时,有什么方法可以做到这一点吗

我的意思是,在从@x本身选择性别时,我们必须使用条件语句返回最终值(即1、2或3)

这也将有助于消除局部变量/查询成本,这可以在一次获取中完成

以下是我必须从单个查询中获得的所需结果

SELECT 
@X.value('(Detail/Gender)[1]', 'varchar') as Gender
试试像这样的东西

Gender
1
或者使用目录表并将键(M、F、…)连接到任何映射值

更新:目录表
DECLARE@xml=
不
M
F
哎呀
';
声明@mockup表(代码VARCHAR(1),值VARCHAR(10));
插入@mockup value('M',1),('F',2);
选择m.值
来自@xml.nodes(N'/Detail/Gender'),作为(g)
左连接@mockup作为m.Code=g.value上的m(N'text()[1],'nvarchar(max');

是的,这在案例陈述中对我很有用。但我无法获得您在此处引用的目录表的任何参考。如果您不介意,请参考一些如何实现此类目录表的链接。太好了,感谢+1的澄清​ 从我这边
Gender
1
SELECT 
CASE WHEN @X.value('(Detail/Gender)[1]', 'varchar(max)')='M' THEN 1 ELSE 2 END  as Gender
DECLARE @xml XML=
N'<Detail>
 <Gender>M</Gender>
 <Gender>F</Gender>
 <Gender>oops</Gender>
 </Detail>';

DECLARE @mockup TABLE(Code VARCHAR(1),Value VARCHAR(10));
INSERT INTO @mockup VALUES('M',1),('F',2);

SELECT m.Value
FROM @xml.nodes(N'/Detail/Gender') AS A(g)
LEFT JOIN @mockup AS m ON m.Code=g.value(N'text()[1]','nvarchar(max)');