sql - 带有case语句的外部应用和内部的Xpath返回错误
问题描述
我的表有 3 列:
- 员工ID
- 积极的
- 数据
数据是包含主题和标记的 XML 类型。我需要从 XML 中提取标记和主题,但是当员工 ID 为 InActive 时,即使 XML 具有主题和标记,我也只需将单个结果返回为 NULL。
以下是我尝试过的查询,但出现以下错误。
当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。
SELECT eo.employeeid,
Result.marks.[Subject],
Result.marks.[Mark]
FROM employee eo
OUTER apply (SELECT CASE
WHEN eo.active = 0 THEN (SELECT NULL AS 'Subject',
NULL AS 'Mark')
ELSE ((SELECT f.n.value('@Subject', 'varchar(100)')
AS
'Subject',
f.n.value('@Mark', 'int')
AS
'Mark'
FROM eo.data.nodes('(/Employee/Results)') AS
F(n)))
END AS marks) Result
解决方案
DECLARE @employee TABLE
(
employeeid INT IDENTITY(1,1),
active BIT,
data XML
);
INSERT INTO @employee(active, data)
VALUES
(1, N'<Employee><Results Subject="subject 1" Mark="111"/></Employee>'),
(1, N'<Employee><Results Subject="subject 2" Mark="222"/></Employee>'),
(0, N'<Employee><Results Subject="subject 3" Mark="333"/></Employee>');
SELECT
eo.employeeid, eo.active,
f.n.value('@Subject', 'varchar(100)') AS 'Subject',
f.n.value('@Mark', 'int') AS 'Mark'
FROM
(
SELECT employeeid, active,
CASE active WHEN 1 THEN data END AS data
FROM @employee
) AS eo
OUTER APPLY eo.data.nodes('Employee/Results') AS F(n);
推荐阅读
- android - 设置 MinifyEnabled 后应用程序崩溃并出现未知错误 - Kotlin
- javascript - 如何自动选择 React Material TextField 的值?
- javascript - 如何在 React JS 中呈现 CKEditor4 wiris MathML 公式
- mysql - 如何根据一对多的关系进行选择?
- r - 根据if语句重复R中的单元格值
- html - 在 VS 中调试 ASP.NET Web 应用程序时未加载图像文件
- html - Boostrap 4.5.2 导航栏下拉菜单出现在错误的位置
- angular - 如何以角度为 bpmn-js 中的一个元素着色
- visual-studio - 安装旧版本的 Visual Studio 2019
- flutter - 延迟后如何更改材质按钮的状态?