具有选择性别名的列

Rai*_*lee 4 xml sql-server

我想根据特定的列条件选择别名并输出所需的 XML。

假设我们有一个名为 的表ACCOUNTS

姓名年龄
--------- ---
约翰·多伊 30
玛丽巷 40
爱丽丝鲍勃 50

询问:

;WITH XMLNAMESPACES
(
  'http://www.w3.org/2001/XMLSchema-instance' AS abc, 'uri' AS def
)
SELECT 
     CASE WHEN AGE <= 30 THEN 'BUYER' AS [def:GIRL]
          WHEN AGE >=40 THEN 'SELLER' END AS [def:BOY]
FROM ACCOUNTS
FOR XML PATH('abc:OilCompany'), TYPE
Run Code Online (Sandbox Code Playgroud)

输出应该是:

 <abc:OilCompany>
   <def:GIRL>BUYER</def:GIRL>
   <def:BOY>SELLER</def:BOY>
   <def:BOY>SELLER</def:BOY>
 </abc:OilCompany>
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 5

默认情况下,SQL Server 不会为 NULL 值创建节点,因此如果您将查询更改为使用两个 CASE 语句并在没有匹配项时返回 NULL,您将获得您正在寻找的 XML。

WITH XMLNAMESPACES
(
  'http://www.w3.org/2001/XMLSchema-instance' AS abc, 
  'uri' AS def
)
SELECT CASE WHEN AGE <= 30 THEN 'BUYER' END AS [def:GIRL],
       CASE WHEN AGE >= 40 THEN 'SELLER' END AS [def:BOY]
FROM ACCOUNTS
FOR XML PATH(''), ROOT('abc:OilCompany'), TYPE;
Run Code Online (Sandbox Code Playgroud)

数据库小提琴