Sql server 需要帮助格式化SQL Server XML同级查询的输出吗

Sql server 需要帮助格式化SQL Server XML同级查询的输出吗,sql-server,xml,formatting,Sql Server,Xml,Formatting,考虑以下SQL Server XML输出: <CUSTOMER> <CUST_ID>TEST_CUSTOMER_01</CUST_ID> <ORG_CODE>MY_ORG</ORG_CODE> <CUSTOMER_TYPE CUST_TYPE="RETAIL" /> <CUSTOMER_COUNTRY CTRY_CODE="US" /> </CUSTOMER> 要求输出与下面的输出类

考虑以下SQL Server XML输出:

<CUSTOMER>
  <CUST_ID>TEST_CUSTOMER_01</CUST_ID>
  <ORG_CODE>MY_ORG</ORG_CODE>
  <CUSTOMER_TYPE CUST_TYPE="RETAIL" />
  <CUSTOMER_COUNTRY CTRY_CODE="US" />
</CUSTOMER>
要求输出与下面的输出类似。在上面的查询中,用
元素
替换两个
类型
单词是不行的

那我怎么做呢

<CUSTOMER>
   <CUST_ID>TEST_CUSTOMER_01</CUST_ID>
   <ORG_CODE>MY_ORG</ORG_CODE>
   <CUSTOMER_TYPE>
      <CUST_TYPE>SHIP_TO</CUST_TYPE>
   </CUSTOMER_TYPE>
   <CUSTOMER_COUNTRY>
     <CTRY_CODE>US</CTRY_CODE>
   </CUSTOMER_COUNTRY>
</CUSTOMER>

测试客户01
我的组织
装运至
美国
谢谢

试试这个查询

select CUST_ID,ORG_CODE,( SELECT CUSTOMER_TYPE.CUST_TYPE AS CUST_TYPE
  FROM   @customer_type CUSTOMER_TYPE
  WHERE  CUSTOMER.CUST_ID = CUSTOMER_TYPE.CUSTOMER_ID
  FOR XML  path (''),TYPE) AS 'CUSTOMER_TYPE' ,(
SELECT CUSTOMER_COUNTRY.CTRY_CODE as CTRY_CODE
  FROM   @customer_country CUSTOMER_COUNTRY
  WHERE  CUSTOMER.CUST_ID = CUSTOMER_COUNTRY.CUSTOMER_ID
 for xml path (''),TYPE
) AS 'CUSTOMER_COUNTRY'   from
@customer CUSTOMER
for xml auto, ELEMENTS
使用上述查询,您将得到如下结果:

<CUSTOMER>
  <CUST_ID>TEST_CUSTOMER_01</CUST_ID>
  <ORG_CODE>MY_ORG</ORG_CODE>
  <CUSTOMER_TYPE>
    <CUST_TYPE>SHIP_TO</CUST_TYPE>
  </CUSTOMER_TYPE>
  <CUSTOMER_COUNTRY>
    <CTRY_CODE>US</CTRY_CODE>
  </CUSTOMER_COUNTRY>
</CUSTOMER>

测试客户01
我的组织
装运至
美国
对于XML路径来说,最好的(使用率和性能最好!)是
。通过简单的命名来定义任何想要的输出是非常直观和容易的

SELECT 
    'TEST_CUSTOMER_01' AS [CUST_ID]
    ,'MY_ORG' AS [ORG_CODE]
    ,'SHIP_TO' AS [CUSTOMER_TYPE/CUST_TYPE]
    ,'US' AS [CUSTOMER_COUNTRY/CTRY_CODE]
--FROM   
--    CUSTOMER
--WHERE 
--    CUSTOMER.CUST_ID = 'TEST_CUSTOMER_01'
FOR XML PATH('CUSTOMER')

哇!比我的答案好得多。:)谢谢你的回答!
SELECT 
    'TEST_CUSTOMER_01' AS [CUST_ID]
    ,'MY_ORG' AS [ORG_CODE]
    ,'SHIP_TO' AS [CUSTOMER_TYPE/CUST_TYPE]
    ,'US' AS [CUSTOMER_COUNTRY/CTRY_CODE]
--FROM   
--    CUSTOMER
--WHERE 
--    CUSTOMER.CUST_ID = 'TEST_CUSTOMER_01'
FOR XML PATH('CUSTOMER')