从XML中获取数据以及单个查询中的条件

时间:2017-06-10 17:05:57

标签: sql xml tsql xpath xquery

declare @X XML=
'<Detail>
 <Gender>M</Gender>
 </Detail>'

我想查询上面这个简单的XML,我想计算性别标签中的值

如果这有价值&#39; M&#39;然后我想以1 的形式取回结果 否则,如果这有价值&#39; F&#39;然后我想把结果取回2
其他返回0

我们可以使用以下查询轻松完成此操作,将性别值返回为M

SELECT 
@X.value('(Detail/Gender)[1]', 'varchar') as Gender

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

从XML本身获取时有没有办法做到这一点?

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

这也有助于删除本地变量/查询成本,这可以在单个Fetch本身中完成

以下将是我需要的结果,必须从单个查询中获取

Gender
1

1 个答案:

答案 0 :(得分:1)

尝试类似

的内容
SELECT 
CASE WHEN @X.value('(Detail/Gender)[1]', 'varchar(max)')='M' THEN 1 ELSE 2 END  as Gender

或者使用目录表并将(M,F,?...)连接到任何映射值。

更新:目录表

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)');