SQL 服务器 XML 粉碎速度太慢

SQL Server XML Shredding is way too slow

我正在尝试在 table 的字段中切碎一些 XML,但它花费的时间太长了。将一条记录解码成3列4行用了24分钟

SELECT 
   p.value('(./CLAIM_ROW/CLAIM_NUMBER)[1]', 'VARCHAR(10)') AS ClaimID,
   p.value('(./LINE_GROUP/LINE_ROW/CLAIM_LINE)[1]', 'VARCHAR(10)') AS ClaimLine,
   p.value('(./LINE_GROUP/LINE_ROW/PAY_PERCENT)[1]', 'VARCHAR(10)') AS PAY_PERCENT 
FROM (SELECT CAST(xmldata AS XML) xdata FROM claimextxml WHERE claimid = '16022E000000') AS t1 
CROSS APPLY xdata.nodes('/CLAIMCHECK') t(p) 

这不是正确的方法。我应该如何解码这个 XML?

XML:

<CLAIMCHECK xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <CLAIM_ROW>
        <ACCIDENT_CAUSE />
        <ACCOUNT>CAL</ACCOUNT>
        <AFFIL_TYPE>GROUP</AFFIL_TYPE>
        <BILL_CLASS_CODE/>
        <BYPASS_CC_IND />
        <CARRIER_ID>CAR0000000001  </CARRIER_ID>
        <CLAIM_NUMBER>16022E000000</CLAIM_NUMBER>
        <CLAIM_SOURCE_ID>3              </CLAIM_SOURCE_ID>
        <CLAIM_START_DATE>01/11/2016</CLAIM_START_DATE>
        <CLAIM_END_DATE>01/11/2016</CLAIM_END_DATE>
        <DATE_ONSET />
        <DOB>08/01/1999</DOB>
        <ELIGIBLE_ORG_ID>ELO0000000002  </ELIGIBLE_ORG_ID>
        <ENROLL_TYPE>I</ENROLL_TYPE>
        <ENROLLMENT_TYPE>S</ENROLLMENT_TYPE>
        <FACILITY_CODE/>
        <FREQUENCY_CODE>1</FREQUENCY_CODE>
        <CLAIM_TYPE>PROFESSIONAL</CLAIM_TYPE>
        <FORM_TYPE>1500</FORM_TYPE>
        <IS_AUTH>N</IS_AUTH>
        <IS_AUTO_ACCIDENT>N</IS_AUTO_ACCIDENT>
        <IS_EMPLOYMENT>N</IS_EMPLOYMENT>
        <IS_ITS_CLAIM>N</IS_ITS_CLAIM>
        <IS_OTHER_ACCIDENT>N</IS_OTHER_ACCIDENT>
        <ITS_TYPE />
        <COB_TYPE>Medicare</COB_TYPE>
        <COVERAGE_TYPE>HospitalOnly</COVERAGE_TYPE>
        <MEMBER_NO>MBR0000000000</MEMBER_NO>
        <PATIENT_SEX>M</PATIENT_SEX>
        <PAY_TO>AFL0000000000</PAY_TO>
        <PCP>N</PCP>
        <PHY_ZIP>93311</PHY_ZIP>
        <PLAN_ID>BPL0000000000</PLAN_ID>
        <PLAN_TYPE>Medical        </PLAN_TYPE>
        <PROCEDURE_COUNT>4</PROCEDURE_COUNT>
        <PROGRAM_ID>PGM0000000000</PROGRAM_ID>
        <PROGRAM_TYPE>Medicaid HMO</PROGRAM_TYPE>
        <PROVIDER>PRV000000</PROVIDER>
        <PROVIDER_TYPE>08</PROVIDER_TYPE>
        <CLAIM_VENDOR_FTIN />
        <ADDITIONAL_INFO_INDICATOR>N</ADDITIONAL_INFO_INDICATOR>
        <OPTIONAL_DATA />
        <REFER_TO>PRV000000</REFER_TO>
        <SEG_TYPE>INT</SEG_TYPE>
        <SORT_DATA />
        <SPECIALTY>GE             </SPECIALTY>
        <STATUS>OPEN</STATUS>
        <TOTAL_AMT>3500.00</TOTAL_AMT>
        <ABEND_CODE>NO</ABEND_CODE>
        <ABEND_MESSAGE/>
        <CLAIM_ERROR_CODE>00</CLAIM_ERROR_CODE>
        <CLAIM_ERROR_MESSAGE/>
        <CLAIMCHECK_IND>PEND-C</CLAIMCHECK_IND>
    </CLAIM_ROW>
    <DIAG_GROUP>
        <DIAG_ROW>
            <DIAG_NO>1</DIAG_NO>
            <DIAG_CODE>K63.5</DIAG_CODE>
            <DX_CODING_SYS>0</DX_CODING_SYS>
        </DIAG_ROW>
        <DIAG_ROW>
            <DIAG_NO>2</DIAG_NO>
            <DIAG_CODE>K57.30</DIAG_CODE>
            <DX_CODING_SYS>0</DX_CODING_SYS>
        </DIAG_ROW>
        <DIAG_ROW>
            <DIAG_NO>3</DIAG_NO>
            <DIAG_CODE>K64.9</DIAG_CODE>
            <DX_CODING_SYS>0</DX_CODING_SYS>
        </DIAG_ROW>
    </DIAG_GROUP>
    <LINE_GROUP>
        <LINE_ROW>
            <AMOUNT_PAID>0.00</AMOUNT_PAID>
            <CHARGE>1200.00</CHARGE>
            <PX_TOTAL_AMOUNT>3500.0000</PX_TOTAL_AMOUNT>
            <PX_CLAIM_DRG_CODE />
            <CLAIM_LINE>1</CLAIM_LINE>
            <CODE_MODIFIER1>AG</CODE_MODIFIER1>
            <CODE_MODIFIER2/>
            <CODE_MODIFIER3/>
            <CODE_MODIFIER4/>
            <CONTRACT_AMOUNT>0.00</CONTRACT_AMOUNT>
            <PROCEDURE_CODE>45385</PROCEDURE_CODE>
            <PX_CLAIM_NUM>16022E000000</PX_CLAIM_NUM>
            <PX_CLAIM_STATUS>OPEN</PX_CLAIM_STATUS>
            <PX_CODING_SYS>0</PX_CODING_SYS>
            <PX_DX>K63.5</PX_DX>
            <DIAG_PTR1>2</DIAG_PTR1>
            <DIAG_PTR2>3</DIAG_PTR2>
            <DIAG_PTR3 />
            <DIAG_PTR4 />
            <DIAG_PTR5 />
            <DIAG_PTR6 />
            <DIAG_PTR7 />
            <PX_DOS>01/11/2016</PX_DOS>
            <PX_POS>24</PX_POS>
            <PX_PROVIDER>PRV000000</PX_PROVIDER>
            <PX_PROVIDER_TYPE>08</PX_PROVIDER_TYPE>
            <PX_SPECIALTY>GE             </PX_SPECIALTY>
            <PX_PROVIDER_STATUS>1</PX_PROVIDER_STATUS>
            <PX_CLAIM_VENDOR_FTIN />
            <PX_ADDITIONAL_INFO_INDICATOR>N</PX_ADDITIONAL_INFO_INDICATOR>
            <PX_STATUS>OKAY</PX_STATUS>
            <REFERRAL_ID />
            <REV_CODE />
            <SERVICE_UNITS>1</SERVICE_UNITS>
            <PX_TYPE_OF_SERVICE />
            <PX_CLAIM_TYPE>PROFESSIONAL</PX_CLAIM_TYPE>
            <PX_FORM_TYPE>1500</PX_FORM_TYPE>
            <THRU_DOS>01/11/2016</THRU_DOS>
            <PX_CLAIM_START_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_START_DATE>
            <PX_CLAIM_END_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_END_DATE>
            <UNIT_EXP_LINE_IND>Y</UNIT_EXP_LINE_IND>
            <PX_BILL_CLASS_CODE/>
            <PX_FACILITY_CODE/>
            <PX_FREQUENCY_CODE>1</PX_FREQUENCY_CODE>
            <AUDIT_RESULT>000</AUDIT_RESULT>
            <AUDIT_DISPOSITION>OKAY</AUDIT_DISPOSITION>
            <AUDIT_MSG1/>
            <AUDIT_MSG2/>
            <DROPPED_DAY_RANGE/>
            <LINE_ERROR_CODE>00</LINE_ERROR_CODE>
            <LINE_ERROR_MESSAGE/>
            <LINE_ORIGINATION>ORG-C</LINE_ORIGINATION>
            <ORG_AUDIT_RESULT>FLT-C-C</ORG_AUDIT_RESULT>
            <ORIGINAL_CLAIM/>
            <ORIGINAL_CODE/>
            <ORIGINAL_LINE/>
            <PAY_PERCENT/>
            <PAM_AUDIT_RESULT>FLT-C-C</PAM_AUDIT_RESULT>
            <PAM_CRITERIA_IND/>
            <PAM_CRITERIA_NO/>
            <PAM_CRITERIA_TYPE/>
            <PAM_MAX_ALLOWED/>
            <PAM_POLICY_ID/>
            <RVU/>
            <SS_MSG_NO/>
            <SS_MSG_TXT/>
            <SS_STATUS/>
            <LINE_SS_ENTRY_NO>000</LINE_SS_ENTRY_NO>
            <SURVIVOR_CLAIM/>
            <SURVIVOR_CODE/>
            <SURVIVOR_LINE_NO/>
            <REPORT_CODE/>
        </LINE_ROW>
        <LINE_ROW>
            <AMOUNT_PAID>0.00</AMOUNT_PAID>
            <CHARGE>1200.00</CHARGE>
            <PX_TOTAL_AMOUNT>3500.0000</PX_TOTAL_AMOUNT>
            <PX_CLAIM_DRG_CODE />
            <CLAIM_LINE>2</CLAIM_LINE>
            <CODE_MODIFIER1>59</CODE_MODIFIER1>
            <CODE_MODIFIER2>51</CODE_MODIFIER2>
            <CODE_MODIFIER3/>
            <CODE_MODIFIER4/>
            <CONTRACT_AMOUNT>0.00</CONTRACT_AMOUNT>
            <PROCEDURE_CODE>45384</PROCEDURE_CODE>
            <PX_CLAIM_NUM>16022E000000</PX_CLAIM_NUM>
            <PX_CLAIM_STATUS>OPEN</PX_CLAIM_STATUS>
            <PX_CODING_SYS>0</PX_CODING_SYS>
            <PX_DX>K63.5</PX_DX>
            <DIAG_PTR1>2</DIAG_PTR1>
            <DIAG_PTR2>3</DIAG_PTR2>
            <DIAG_PTR3 />
            <DIAG_PTR4 />
            <DIAG_PTR5 />
            <DIAG_PTR6 />
            <DIAG_PTR7 />
            <PX_DOS>01/11/2016</PX_DOS>
            <PX_POS>24</PX_POS>
            <PX_PROVIDER>PRV004880</PX_PROVIDER>
            <PX_PROVIDER_TYPE>08</PX_PROVIDER_TYPE>
            <PX_SPECIALTY>GE             </PX_SPECIALTY>
            <PX_PROVIDER_STATUS>1</PX_PROVIDER_STATUS>
            <PX_CLAIM_VENDOR_FTIN />
            <PX_ADDITIONAL_INFO_INDICATOR>N</PX_ADDITIONAL_INFO_INDICATOR>
            <PX_STATUS>OKAY</PX_STATUS>
            <REFERRAL_ID />
            <REV_CODE />
            <SERVICE_UNITS>1</SERVICE_UNITS>
            <PX_TYPE_OF_SERVICE />
            <PX_CLAIM_TYPE>PROFESSIONAL</PX_CLAIM_TYPE>
            <PX_FORM_TYPE>1500</PX_FORM_TYPE>
            <THRU_DOS>01/11/2016</THRU_DOS>
            <PX_CLAIM_START_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_START_DATE>
            <PX_CLAIM_END_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_END_DATE>
            <UNIT_EXP_LINE_IND>Y</UNIT_EXP_LINE_IND>
            <PX_BILL_CLASS_CODE/>
            <PX_FACILITY_CODE/>
            <PX_FREQUENCY_CODE>1</PX_FREQUENCY_CODE>
            <AUDIT_RESULT>000</AUDIT_RESULT>
            <AUDIT_DISPOSITION>OKAY</AUDIT_DISPOSITION>
            <AUDIT_MSG1/>
            <AUDIT_MSG2/>
            <DROPPED_DAY_RANGE>000</DROPPED_DAY_RANGE>
            <LINE_ERROR_CODE>00</LINE_ERROR_CODE>
            <LINE_ERROR_MESSAGE/>
            <LINE_ORIGINATION>ORG-C</LINE_ORIGINATION>
            <ORG_AUDIT_RESULT>NON-C-N</ORG_AUDIT_RESULT>
            <ORIGINAL_CLAIM/>
            <ORIGINAL_CODE/>
            <ORIGINAL_LINE>000</ORIGINAL_LINE>
            <PAY_PERCENT>050</PAY_PERCENT>
            <PAM_AUDIT_RESULT>NON-C-N</PAM_AUDIT_RESULT>
            <PAM_CRITERIA_IND>N</PAM_CRITERIA_IND>
            <PAM_CRITERIA_NO>0000</PAM_CRITERIA_NO>
            <PAM_CRITERIA_TYPE/>
            <PAM_MAX_ALLOWED>0000</PAM_MAX_ALLOWED>
            <PAM_POLICY_ID/>
            <RVU>10.07</RVU>
            <SS_MSG_NO/>
            <SS_MSG_TXT/>
            <SS_STATUS/>
            <LINE_SS_ENTRY_NO>000</LINE_SS_ENTRY_NO>
            <SURVIVOR_CLAIM/>
            <SURVIVOR_CODE/>
            <SURVIVOR_LINE_NO/>
            <REPORT_CODE>NON-N-C</REPORT_CODE>
        </LINE_ROW>
        <LINE_ROW>
            <AMOUNT_PAID>0.00</AMOUNT_PAID>
            <CHARGE>0</CHARGE>
            <PX_TOTAL_AMOUNT>3500.0000</PX_TOTAL_AMOUNT>
            <PX_CLAIM_DRG_CODE />
            <CLAIM_LINE>3</CLAIM_LINE>
            <CODE_MODIFIER1>59</CODE_MODIFIER1>
            <CODE_MODIFIER2>51</CODE_MODIFIER2>
            <CODE_MODIFIER3/>
            <CODE_MODIFIER4/>
            <CONTRACT_AMOUNT>0.00</CONTRACT_AMOUNT>
            <PROCEDURE_CODE>45381</PROCEDURE_CODE>
            <PX_CLAIM_NUM>16022E000000</PX_CLAIM_NUM>
            <PX_CLAIM_STATUS>OPEN</PX_CLAIM_STATUS>
            <PX_CODING_SYS>0</PX_CODING_SYS>
            <PX_DX>K63.5</PX_DX>
            <DIAG_PTR1>2</DIAG_PTR1>
            <DIAG_PTR2>3</DIAG_PTR2>
            <DIAG_PTR3 />
            <DIAG_PTR4 />
            <DIAG_PTR5 />
            <DIAG_PTR6 />
            <DIAG_PTR7 />
            <PX_DOS>01/11/2016</PX_DOS>
            <PX_POS>24</PX_POS>
            <PX_PROVIDER>PRV000000</PX_PROVIDER>
            <PX_PROVIDER_TYPE>08</PX_PROVIDER_TYPE>
            <PX_SPECIALTY>GE             </PX_SPECIALTY>
            <PX_PROVIDER_STATUS>1</PX_PROVIDER_STATUS>
            <PX_CLAIM_VENDOR_FTIN />
            <PX_ADDITIONAL_INFO_INDICATOR>N</PX_ADDITIONAL_INFO_INDICATOR>
            <PX_STATUS>OKAY</PX_STATUS>
            <REFERRAL_ID />
            <REV_CODE />
            <SERVICE_UNITS>1</SERVICE_UNITS>
            <PX_TYPE_OF_SERVICE />
            <PX_CLAIM_TYPE>PROFESSIONAL</PX_CLAIM_TYPE>
            <PX_FORM_TYPE>1500</PX_FORM_TYPE>
            <THRU_DOS>01/11/2016</THRU_DOS>
            <PX_CLAIM_START_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_START_DATE>
            <PX_CLAIM_END_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_END_DATE>
            <UNIT_EXP_LINE_IND>Y</UNIT_EXP_LINE_IND>
            <PX_BILL_CLASS_CODE/>
            <PX_FACILITY_CODE/>
            <PX_FREQUENCY_CODE>1</PX_FREQUENCY_CODE>
            <AUDIT_RESULT>8292</AUDIT_RESULT>
            <AUDIT_DISPOSITION>PEND</AUDIT_DISPOSITION>
            <AUDIT_MSG1>Procedure has been replaced with modifier 51 removed.</AUDIT_MSG1>
            <AUDIT_MSG2/>
            <DROPPED_DAY_RANGE>000</DROPPED_DAY_RANGE>
            <LINE_ERROR_CODE>00</LINE_ERROR_CODE>
            <LINE_ERROR_MESSAGE/>
            <LINE_ORIGINATION>ORG-C</LINE_ORIGINATION>
            <ORG_AUDIT_RESULT>M51-R-C</ORG_AUDIT_RESULT>
            <ORIGINAL_CLAIM/>
            <ORIGINAL_CODE/>
            <ORIGINAL_LINE>000</ORIGINAL_LINE>
            <PAY_PERCENT>100</PAY_PERCENT>
            <PAM_AUDIT_RESULT>NON-C-N</PAM_AUDIT_RESULT>
            <PAM_CRITERIA_IND/>
            <PAM_CRITERIA_NO>0000</PAM_CRITERIA_NO>
            <PAM_CRITERIA_TYPE/>
            <PAM_MAX_ALLOWED>0000</PAM_MAX_ALLOWED>
            <PAM_POLICY_ID/>
            <RVU>11.09</RVU>
            <SS_MSG_NO/>
            <SS_MSG_TXT/>
            <SS_STATUS/>
            <LINE_SS_ENTRY_NO>000</LINE_SS_ENTRY_NO>
            <SURVIVOR_CLAIM>16022E000000</SURVIVOR_CLAIM>
            <SURVIVOR_CODE>45000</SURVIVOR_CODE>
            <SURVIVOR_LINE_NO>4</SURVIVOR_LINE_NO>
            <REPORT_CODE>M51-R-C</REPORT_CODE>
        </LINE_ROW>
        <LINE_ROW>
            <CHARGE>1100.00</CHARGE>
            <PX_CLAIM_NUM>16022E000000</PX_CLAIM_NUM>
            <PROCEDURE_CODE>45381</PROCEDURE_CODE>
            <PX_DOS>01/11/2016</PX_DOS>
            <THRU_DOS>01/11/2016</THRU_DOS>
            <PX_CLAIM_STATUS>OPEN</PX_CLAIM_STATUS>
            <PX_POS>24</PX_POS>
            <PX_CODING_SYS>0</PX_CODING_SYS>
            <PX_DX>K63.5</PX_DX>
            <DIAG_PTR1>2</DIAG_PTR1>
            <DIAG_PTR2>3</DIAG_PTR2>
            <DIAG_PTR3/>
            <DIAG_PTR4/>
            <DIAG_PTR5/>
            <DIAG_PTR6/>
            <DIAG_PTR7/>
            <PX_PROVIDER>PRV000000</PX_PROVIDER>
            <PX_PROVIDER_TYPE>08</PX_PROVIDER_TYPE>
            <PX_SPECIALTY>GE</PX_SPECIALTY>
            <PX_STATUS>OKAY</PX_STATUS>
            <REFERRAL_ID/>
            <REV_CODE/>
            <UNIT_EXP_LINE_IND>Y</UNIT_EXP_LINE_IND>
            <CLAIM_LINE>4</CLAIM_LINE>
            <CODE_MODIFIER1>59</CODE_MODIFIER1>
            <CODE_MODIFIER2/>
            <CODE_MODIFIER3/>
            <CODE_MODIFIER4/>
            <RVU>11.09</RVU>
            <SERVICE_UNITS>001</SERVICE_UNITS>
            <AUDIT_RESULT>000</AUDIT_RESULT>
            <AUDIT_DISPOSITION>OKAY</AUDIT_DISPOSITION>
            <AUDIT_MSG1/>
            <AUDIT_MSG2/>
            <DROPPED_DAY_RANGE>000</DROPPED_DAY_RANGE>
            <LINE_ERROR_CODE>00</LINE_ERROR_CODE>
            <LINE_ERROR_MESSAGE/>
            <LINE_ORIGINATION>M51-C</LINE_ORIGINATION>
            <ORG_AUDIT_RESULT>NON-C-N</ORG_AUDIT_RESULT>
            <ORIGINAL_CLAIM>16022E000000</ORIGINAL_CLAIM>
            <ORIGINAL_CODE>45381</ORIGINAL_CODE>
            <PAM_AUDIT_RESULT/>
            <PAM_CRITERIA_IND/>
            <PAM_CRITERIA_NO>0000</PAM_CRITERIA_NO>
            <PAM_CRITERIA_TYPE/>
            <PAM_MAX_ALLOWED>0000</PAM_MAX_ALLOWED>
            <PAM_POLICY_ID/>
            <ORIGINAL_LINE>003</ORIGINAL_LINE>
            <PAY_PERCENT>100</PAY_PERCENT>
            <SS_MSG_NO/>
            <SS_MSG_TXT/>
            <SS_STATUS/>
            <LINE_SS_ENTRY_NO>000</LINE_SS_ENTRY_NO>
            <SURVIVOR_CLAIM/>
            <SURVIVOR_CODE/>
            <SURVIVOR_LINE_NO/>
            <REPORT_CODE>NON-N-C</REPORT_CODE>
            <AMOUNT_PAID>0.00</AMOUNT_PAID>
            <CONTRACT_AMOUNT>0.00</CONTRACT_AMOUNT>
        </LINE_ROW>
    </LINE_GROUP>
</CLAIMCHECK>

我没有架构。我没有在数据库上创建对象的权限。

更新:

在用户(尤其是 Shnugo)的帮助下,我更新了我的查询并使其基本正常工作。我现在正试图摆脱一些 XML 标签。

SELECT 
   xdata.value('(/CLAIMCHECK/CLAIM_ROW/CLAIM_NUMBER)[1]', 'VARCHAR(100)') AS ClaimID, 
   CAST(xdata.query('/CLAIMCHECK/DIAG_GROUP/DIAG_ROW/DIAG_CODE') AS VARCHAR(100) ) AS DIAGs,
   p.value('(CLAIM_LINE)[1]', 'VARCHAR(100)') AS ClaimLine,
   p.value('(PAY_PERCENT)[1]', 'VARCHAR(100)') AS PAY_PERCENT
FROM (SELECT CAST(xmldata AS XML) xdata FROM claimextxml WHERE claimid = '16022E003981') AS t1 
CROSS APPLY xdata.nodes('/CLAIMCHECK/LINE_GROUP/LINE_ROW') t(p)  

目前 DIAGs 字段有 DIAG 标签 -

<DIAG_CODE>K63.5</DIAG_CODE><DIAG_CODE>K57.30</DIAG_CODE><DIAG_CODE>K64.9</DIAG_CODE>

是否有一种不同的 XML 方法可以在不使用 SQL 中的 REPLACE 的情况下消除这些问题?

编辑:根据您更新的查询:

只需将 XQuery 表达式包装在 data() 中就足够了:

(注意:注意使用合适的claimid!)

SELECT 
   xdata.value('(/CLAIMCHECK/CLAIM_ROW/CLAIM_NUMBER)[1]', 'VARCHAR(100)') AS ClaimID, 
   CAST(xdata.query('data(/CLAIMCHECK/DIAG_GROUP/DIAG_ROW/DIAG_CODE)') AS VARCHAR(100) ) AS DIAGs,
   p.value('(CLAIM_LINE)[1]', 'VARCHAR(100)') AS ClaimLine,
   p.value('(PAY_PERCENT)[1]', 'VARCHAR(100)') AS PAY_PERCENT
FROM (SELECT CAST(xmldata AS XML) xdata FROM claimextxml WHERE claimid = '16022E000000') AS t1 
CROSS APPLY xdata.nodes('/CLAIMCHECK/LINE_GROUP/LINE_ROW') t(p)  

结果

16022E000000    K63.5 K57.30 K64.9  1   
16022E000000    K63.5 K57.30 K64.9  2   050
16022E000000    K63.5 K57.30 K64.9  3   100
16022E000000    K63.5 K57.30 K64.9  4   100

上一个

我设置了一个示例,并尝试创建一个尽可能接近您的示例。通过您的查询,我一眼就能得到答案......但是您的方法只会提供一行。您是在循环调用吗?

这是我的测试。最后你会发现一个查询,它一次返回所有字段(我只实现了一些例子......)

您实际上会将其拆分为两个调用以避免不需要的交叉连接。你的诊断组和你的线路组是两个独立的1:n关系......如果你不需要诊断组,就把它拿走......

CREATE TABLE claimextxml(claimid varchar(100),xmldata varchar(max));
INSERT INTO claimextxml VALUES('16022E000000','<CLAIMCHECK xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <CLAIM_ROW>
        <ACCIDENT_CAUSE />
        <ACCOUNT>CAL</ACCOUNT>
        <AFFIL_TYPE>GROUP</AFFIL_TYPE>
        <BILL_CLASS_CODE/>
        <BYPASS_CC_IND />
        <CARRIER_ID>CAR0000000001  </CARRIER_ID>
        <CLAIM_NUMBER>16022E000000</CLAIM_NUMBER>
        <CLAIM_SOURCE_ID>3              </CLAIM_SOURCE_ID>
        <CLAIM_START_DATE>01/11/2016</CLAIM_START_DATE>
        <CLAIM_END_DATE>01/11/2016</CLAIM_END_DATE>
        <DATE_ONSET />
        <DOB>08/01/1999</DOB>
        <ELIGIBLE_ORG_ID>ELO0000000002  </ELIGIBLE_ORG_ID>
        <ENROLL_TYPE>I</ENROLL_TYPE>
        <ENROLLMENT_TYPE>S</ENROLLMENT_TYPE>
        <FACILITY_CODE/>
        <FREQUENCY_CODE>1</FREQUENCY_CODE>
        <CLAIM_TYPE>PROFESSIONAL</CLAIM_TYPE>
        <FORM_TYPE>1500</FORM_TYPE>
        <IS_AUTH>N</IS_AUTH>
        <IS_AUTO_ACCIDENT>N</IS_AUTO_ACCIDENT>
        <IS_EMPLOYMENT>N</IS_EMPLOYMENT>
        <IS_ITS_CLAIM>N</IS_ITS_CLAIM>
        <IS_OTHER_ACCIDENT>N</IS_OTHER_ACCIDENT>
        <ITS_TYPE />
        <COB_TYPE>Medicare</COB_TYPE>
        <COVERAGE_TYPE>HospitalOnly</COVERAGE_TYPE>
        <MEMBER_NO>MBR0000000000</MEMBER_NO>
        <PATIENT_SEX>M</PATIENT_SEX>
        <PAY_TO>AFL0000000000</PAY_TO>
        <PCP>N</PCP>
        <PHY_ZIP>93311</PHY_ZIP>
        <PLAN_ID>BPL0000000000</PLAN_ID>
        <PLAN_TYPE>Medical        </PLAN_TYPE>
        <PROCEDURE_COUNT>4</PROCEDURE_COUNT>
        <PROGRAM_ID>PGM0000000000</PROGRAM_ID>
        <PROGRAM_TYPE>Medicaid HMO</PROGRAM_TYPE>
        <PROVIDER>PRV000000</PROVIDER>
        <PROVIDER_TYPE>08</PROVIDER_TYPE>
        <CLAIM_VENDOR_FTIN />
        <ADDITIONAL_INFO_INDICATOR>N</ADDITIONAL_INFO_INDICATOR>
        <OPTIONAL_DATA />
        <REFER_TO>PRV000000</REFER_TO>
        <SEG_TYPE>INT</SEG_TYPE>
        <SORT_DATA />
        <SPECIALTY>GE             </SPECIALTY>
        <STATUS>OPEN</STATUS>
        <TOTAL_AMT>3500.00</TOTAL_AMT>
        <ABEND_CODE>NO</ABEND_CODE>
        <ABEND_MESSAGE/>
        <CLAIM_ERROR_CODE>00</CLAIM_ERROR_CODE>
        <CLAIM_ERROR_MESSAGE/>
        <CLAIMCHECK_IND>PEND-C</CLAIMCHECK_IND>
    </CLAIM_ROW>
    <DIAG_GROUP>
        <DIAG_ROW>
            <DIAG_NO>1</DIAG_NO>
            <DIAG_CODE>K63.5</DIAG_CODE>
            <DX_CODING_SYS>0</DX_CODING_SYS>
        </DIAG_ROW>
        <DIAG_ROW>
            <DIAG_NO>2</DIAG_NO>
            <DIAG_CODE>K57.30</DIAG_CODE>
            <DX_CODING_SYS>0</DX_CODING_SYS>
        </DIAG_ROW>
        <DIAG_ROW>
            <DIAG_NO>3</DIAG_NO>
            <DIAG_CODE>K64.9</DIAG_CODE>
            <DX_CODING_SYS>0</DX_CODING_SYS>
        </DIAG_ROW>
    </DIAG_GROUP>
    <LINE_GROUP>
        <LINE_ROW>
            <AMOUNT_PAID>0.00</AMOUNT_PAID>
            <CHARGE>1200.00</CHARGE>
            <PX_TOTAL_AMOUNT>3500.0000</PX_TOTAL_AMOUNT>
            <PX_CLAIM_DRG_CODE />
            <CLAIM_LINE>1</CLAIM_LINE>
            <CODE_MODIFIER1>AG</CODE_MODIFIER1>
            <CODE_MODIFIER2/>
            <CODE_MODIFIER3/>
            <CODE_MODIFIER4/>
            <CONTRACT_AMOUNT>0.00</CONTRACT_AMOUNT>
            <PROCEDURE_CODE>45385</PROCEDURE_CODE>
            <PX_CLAIM_NUM>16022E000000</PX_CLAIM_NUM>
            <PX_CLAIM_STATUS>OPEN</PX_CLAIM_STATUS>
            <PX_CODING_SYS>0</PX_CODING_SYS>
            <PX_DX>K63.5</PX_DX>
            <DIAG_PTR1>2</DIAG_PTR1>
            <DIAG_PTR2>3</DIAG_PTR2>
            <DIAG_PTR3 />
            <DIAG_PTR4 />
            <DIAG_PTR5 />
            <DIAG_PTR6 />
            <DIAG_PTR7 />
            <PX_DOS>01/11/2016</PX_DOS>
            <PX_POS>24</PX_POS>
            <PX_PROVIDER>PRV000000</PX_PROVIDER>
            <PX_PROVIDER_TYPE>08</PX_PROVIDER_TYPE>
            <PX_SPECIALTY>GE             </PX_SPECIALTY>
            <PX_PROVIDER_STATUS>1</PX_PROVIDER_STATUS>
            <PX_CLAIM_VENDOR_FTIN />
            <PX_ADDITIONAL_INFO_INDICATOR>N</PX_ADDITIONAL_INFO_INDICATOR>
            <PX_STATUS>OKAY</PX_STATUS>
            <REFERRAL_ID />
            <REV_CODE />
            <SERVICE_UNITS>1</SERVICE_UNITS>
            <PX_TYPE_OF_SERVICE />
            <PX_CLAIM_TYPE>PROFESSIONAL</PX_CLAIM_TYPE>
            <PX_FORM_TYPE>1500</PX_FORM_TYPE>
            <THRU_DOS>01/11/2016</THRU_DOS>
            <PX_CLAIM_START_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_START_DATE>
            <PX_CLAIM_END_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_END_DATE>
            <UNIT_EXP_LINE_IND>Y</UNIT_EXP_LINE_IND>
            <PX_BILL_CLASS_CODE/>
            <PX_FACILITY_CODE/>
            <PX_FREQUENCY_CODE>1</PX_FREQUENCY_CODE>
            <AUDIT_RESULT>000</AUDIT_RESULT>
            <AUDIT_DISPOSITION>OKAY</AUDIT_DISPOSITION>
            <AUDIT_MSG1/>
            <AUDIT_MSG2/>
            <DROPPED_DAY_RANGE/>
            <LINE_ERROR_CODE>00</LINE_ERROR_CODE>
            <LINE_ERROR_MESSAGE/>
            <LINE_ORIGINATION>ORG-C</LINE_ORIGINATION>
            <ORG_AUDIT_RESULT>FLT-C-C</ORG_AUDIT_RESULT>
            <ORIGINAL_CLAIM/>
            <ORIGINAL_CODE/>
            <ORIGINAL_LINE/>
            <PAY_PERCENT/>
            <PAM_AUDIT_RESULT>FLT-C-C</PAM_AUDIT_RESULT>
            <PAM_CRITERIA_IND/>
            <PAM_CRITERIA_NO/>
            <PAM_CRITERIA_TYPE/>
            <PAM_MAX_ALLOWED/>
            <PAM_POLICY_ID/>
            <RVU/>
            <SS_MSG_NO/>
            <SS_MSG_TXT/>
            <SS_STATUS/>
            <LINE_SS_ENTRY_NO>000</LINE_SS_ENTRY_NO>
            <SURVIVOR_CLAIM/>
            <SURVIVOR_CODE/>
            <SURVIVOR_LINE_NO/>
            <REPORT_CODE/>
        </LINE_ROW>
        <LINE_ROW>
            <AMOUNT_PAID>0.00</AMOUNT_PAID>
            <CHARGE>1200.00</CHARGE>
            <PX_TOTAL_AMOUNT>3500.0000</PX_TOTAL_AMOUNT>
            <PX_CLAIM_DRG_CODE />
            <CLAIM_LINE>2</CLAIM_LINE>
            <CODE_MODIFIER1>59</CODE_MODIFIER1>
            <CODE_MODIFIER2>51</CODE_MODIFIER2>
            <CODE_MODIFIER3/>
            <CODE_MODIFIER4/>
            <CONTRACT_AMOUNT>0.00</CONTRACT_AMOUNT>
            <PROCEDURE_CODE>45384</PROCEDURE_CODE>
            <PX_CLAIM_NUM>16022E000000</PX_CLAIM_NUM>
            <PX_CLAIM_STATUS>OPEN</PX_CLAIM_STATUS>
            <PX_CODING_SYS>0</PX_CODING_SYS>
            <PX_DX>K63.5</PX_DX>
            <DIAG_PTR1>2</DIAG_PTR1>
            <DIAG_PTR2>3</DIAG_PTR2>
            <DIAG_PTR3 />
            <DIAG_PTR4 />
            <DIAG_PTR5 />
            <DIAG_PTR6 />
            <DIAG_PTR7 />
            <PX_DOS>01/11/2016</PX_DOS>
            <PX_POS>24</PX_POS>
            <PX_PROVIDER>PRV004880</PX_PROVIDER>
            <PX_PROVIDER_TYPE>08</PX_PROVIDER_TYPE>
            <PX_SPECIALTY>GE             </PX_SPECIALTY>
            <PX_PROVIDER_STATUS>1</PX_PROVIDER_STATUS>
            <PX_CLAIM_VENDOR_FTIN />
            <PX_ADDITIONAL_INFO_INDICATOR>N</PX_ADDITIONAL_INFO_INDICATOR>
            <PX_STATUS>OKAY</PX_STATUS>
            <REFERRAL_ID />
            <REV_CODE />
            <SERVICE_UNITS>1</SERVICE_UNITS>
            <PX_TYPE_OF_SERVICE />
            <PX_CLAIM_TYPE>PROFESSIONAL</PX_CLAIM_TYPE>
            <PX_FORM_TYPE>1500</PX_FORM_TYPE>
            <THRU_DOS>01/11/2016</THRU_DOS>
            <PX_CLAIM_START_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_START_DATE>
            <PX_CLAIM_END_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_END_DATE>
            <UNIT_EXP_LINE_IND>Y</UNIT_EXP_LINE_IND>
            <PX_BILL_CLASS_CODE/>
            <PX_FACILITY_CODE/>
            <PX_FREQUENCY_CODE>1</PX_FREQUENCY_CODE>
            <AUDIT_RESULT>000</AUDIT_RESULT>
            <AUDIT_DISPOSITION>OKAY</AUDIT_DISPOSITION>
            <AUDIT_MSG1/>
            <AUDIT_MSG2/>
            <DROPPED_DAY_RANGE>000</DROPPED_DAY_RANGE>
            <LINE_ERROR_CODE>00</LINE_ERROR_CODE>
            <LINE_ERROR_MESSAGE/>
            <LINE_ORIGINATION>ORG-C</LINE_ORIGINATION>
            <ORG_AUDIT_RESULT>NON-C-N</ORG_AUDIT_RESULT>
            <ORIGINAL_CLAIM/>
            <ORIGINAL_CODE/>
            <ORIGINAL_LINE>000</ORIGINAL_LINE>
            <PAY_PERCENT>050</PAY_PERCENT>
            <PAM_AUDIT_RESULT>NON-C-N</PAM_AUDIT_RESULT>
            <PAM_CRITERIA_IND>N</PAM_CRITERIA_IND>
            <PAM_CRITERIA_NO>0000</PAM_CRITERIA_NO>
            <PAM_CRITERIA_TYPE/>
            <PAM_MAX_ALLOWED>0000</PAM_MAX_ALLOWED>
            <PAM_POLICY_ID/>
            <RVU>10.07</RVU>
            <SS_MSG_NO/>
            <SS_MSG_TXT/>
            <SS_STATUS/>
            <LINE_SS_ENTRY_NO>000</LINE_SS_ENTRY_NO>
            <SURVIVOR_CLAIM/>
            <SURVIVOR_CODE/>
            <SURVIVOR_LINE_NO/>
            <REPORT_CODE>NON-N-C</REPORT_CODE>
        </LINE_ROW>
        <LINE_ROW>
            <AMOUNT_PAID>0.00</AMOUNT_PAID>
            <CHARGE>0</CHARGE>
            <PX_TOTAL_AMOUNT>3500.0000</PX_TOTAL_AMOUNT>
            <PX_CLAIM_DRG_CODE />
            <CLAIM_LINE>3</CLAIM_LINE>
            <CODE_MODIFIER1>59</CODE_MODIFIER1>
            <CODE_MODIFIER2>51</CODE_MODIFIER2>
            <CODE_MODIFIER3/>
            <CODE_MODIFIER4/>
            <CONTRACT_AMOUNT>0.00</CONTRACT_AMOUNT>
            <PROCEDURE_CODE>45381</PROCEDURE_CODE>
            <PX_CLAIM_NUM>16022E000000</PX_CLAIM_NUM>
            <PX_CLAIM_STATUS>OPEN</PX_CLAIM_STATUS>
            <PX_CODING_SYS>0</PX_CODING_SYS>
            <PX_DX>K63.5</PX_DX>
            <DIAG_PTR1>2</DIAG_PTR1>
            <DIAG_PTR2>3</DIAG_PTR2>
            <DIAG_PTR3 />
            <DIAG_PTR4 />
            <DIAG_PTR5 />
            <DIAG_PTR6 />
            <DIAG_PTR7 />
            <PX_DOS>01/11/2016</PX_DOS>
            <PX_POS>24</PX_POS>
            <PX_PROVIDER>PRV000000</PX_PROVIDER>
            <PX_PROVIDER_TYPE>08</PX_PROVIDER_TYPE>
            <PX_SPECIALTY>GE             </PX_SPECIALTY>
            <PX_PROVIDER_STATUS>1</PX_PROVIDER_STATUS>
            <PX_CLAIM_VENDOR_FTIN />
            <PX_ADDITIONAL_INFO_INDICATOR>N</PX_ADDITIONAL_INFO_INDICATOR>
            <PX_STATUS>OKAY</PX_STATUS>
            <REFERRAL_ID />
            <REV_CODE />
            <SERVICE_UNITS>1</SERVICE_UNITS>
            <PX_TYPE_OF_SERVICE />
            <PX_CLAIM_TYPE>PROFESSIONAL</PX_CLAIM_TYPE>
            <PX_FORM_TYPE>1500</PX_FORM_TYPE>
            <THRU_DOS>01/11/2016</THRU_DOS>
            <PX_CLAIM_START_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_START_DATE>
            <PX_CLAIM_END_DATE>1/11/2016 12:00:00 AM</PX_CLAIM_END_DATE>
            <UNIT_EXP_LINE_IND>Y</UNIT_EXP_LINE_IND>
            <PX_BILL_CLASS_CODE/>
            <PX_FACILITY_CODE/>
            <PX_FREQUENCY_CODE>1</PX_FREQUENCY_CODE>
            <AUDIT_RESULT>8292</AUDIT_RESULT>
            <AUDIT_DISPOSITION>PEND</AUDIT_DISPOSITION>
            <AUDIT_MSG1>Procedure has been replaced with modifier 51 removed.</AUDIT_MSG1>
            <AUDIT_MSG2/>
            <DROPPED_DAY_RANGE>000</DROPPED_DAY_RANGE>
            <LINE_ERROR_CODE>00</LINE_ERROR_CODE>
            <LINE_ERROR_MESSAGE/>
            <LINE_ORIGINATION>ORG-C</LINE_ORIGINATION>
            <ORG_AUDIT_RESULT>M51-R-C</ORG_AUDIT_RESULT>
            <ORIGINAL_CLAIM/>
            <ORIGINAL_CODE/>
            <ORIGINAL_LINE>000</ORIGINAL_LINE>
            <PAY_PERCENT>100</PAY_PERCENT>
            <PAM_AUDIT_RESULT>NON-C-N</PAM_AUDIT_RESULT>
            <PAM_CRITERIA_IND/>
            <PAM_CRITERIA_NO>0000</PAM_CRITERIA_NO>
            <PAM_CRITERIA_TYPE/>
            <PAM_MAX_ALLOWED>0000</PAM_MAX_ALLOWED>
            <PAM_POLICY_ID/>
            <RVU>11.09</RVU>
            <SS_MSG_NO/>
            <SS_MSG_TXT/>
            <SS_STATUS/>
            <LINE_SS_ENTRY_NO>000</LINE_SS_ENTRY_NO>
            <SURVIVOR_CLAIM>16022E000000</SURVIVOR_CLAIM>
            <SURVIVOR_CODE>45000</SURVIVOR_CODE>
            <SURVIVOR_LINE_NO>4</SURVIVOR_LINE_NO>
            <REPORT_CODE>M51-R-C</REPORT_CODE>
        </LINE_ROW>
        <LINE_ROW>
            <CHARGE>1100.00</CHARGE>
            <PX_CLAIM_NUM>16022E000000</PX_CLAIM_NUM>
            <PROCEDURE_CODE>45381</PROCEDURE_CODE>
            <PX_DOS>01/11/2016</PX_DOS>
            <THRU_DOS>01/11/2016</THRU_DOS>
            <PX_CLAIM_STATUS>OPEN</PX_CLAIM_STATUS>
            <PX_POS>24</PX_POS>
            <PX_CODING_SYS>0</PX_CODING_SYS>
            <PX_DX>K63.5</PX_DX>
            <DIAG_PTR1>2</DIAG_PTR1>
            <DIAG_PTR2>3</DIAG_PTR2>
            <DIAG_PTR3/>
            <DIAG_PTR4/>
            <DIAG_PTR5/>
            <DIAG_PTR6/>
            <DIAG_PTR7/>
            <PX_PROVIDER>PRV000000</PX_PROVIDER>
            <PX_PROVIDER_TYPE>08</PX_PROVIDER_TYPE>
            <PX_SPECIALTY>GE</PX_SPECIALTY>
            <PX_STATUS>OKAY</PX_STATUS>
            <REFERRAL_ID/>
            <REV_CODE/>
            <UNIT_EXP_LINE_IND>Y</UNIT_EXP_LINE_IND>
            <CLAIM_LINE>4</CLAIM_LINE>
            <CODE_MODIFIER1>59</CODE_MODIFIER1>
            <CODE_MODIFIER2/>
            <CODE_MODIFIER3/>
            <CODE_MODIFIER4/>
            <RVU>11.09</RVU>
            <SERVICE_UNITS>001</SERVICE_UNITS>
            <AUDIT_RESULT>000</AUDIT_RESULT>
            <AUDIT_DISPOSITION>OKAY</AUDIT_DISPOSITION>
            <AUDIT_MSG1/>
            <AUDIT_MSG2/>
            <DROPPED_DAY_RANGE>000</DROPPED_DAY_RANGE>
            <LINE_ERROR_CODE>00</LINE_ERROR_CODE>
            <LINE_ERROR_MESSAGE/>
            <LINE_ORIGINATION>M51-C</LINE_ORIGINATION>
            <ORG_AUDIT_RESULT>NON-C-N</ORG_AUDIT_RESULT>
            <ORIGINAL_CLAIM>16022E000000</ORIGINAL_CLAIM>
            <ORIGINAL_CODE>45381</ORIGINAL_CODE>
            <PAM_AUDIT_RESULT/>
            <PAM_CRITERIA_IND/>
            <PAM_CRITERIA_NO>0000</PAM_CRITERIA_NO>
            <PAM_CRITERIA_TYPE/>
            <PAM_MAX_ALLOWED>0000</PAM_MAX_ALLOWED>
            <PAM_POLICY_ID/>
            <ORIGINAL_LINE>003</ORIGINAL_LINE>
            <PAY_PERCENT>100</PAY_PERCENT>
            <SS_MSG_NO/>
            <SS_MSG_TXT/>
            <SS_STATUS/>
            <LINE_SS_ENTRY_NO>000</LINE_SS_ENTRY_NO>
            <SURVIVOR_CLAIM/>
            <SURVIVOR_CODE/>
            <SURVIVOR_LINE_NO/>
            <REPORT_CODE>NON-N-C</REPORT_CODE>
            <AMOUNT_PAID>0.00</AMOUNT_PAID>
            <CONTRACT_AMOUNT>0.00</CONTRACT_AMOUNT>
        </LINE_ROW>
    </LINE_GROUP>
</CLAIMCHECK>');

/* Your query

SELECT 
   p.value('(./CLAIM_ROW/CLAIM_NUMBER)[1]', 'VARCHAR(10)') AS ClaimID,
   p.value('(./LINE_GROUP/LINE_ROW/CLAIM_LINE)[1]', 'VARCHAR(10)') AS ClaimLine,
   p.value('(./LINE_GROUP/LINE_ROW/PAY_PERCENT)[1]', 'VARCHAR(10)') AS PAY_PERCENT 
FROM (SELECT CAST(xmldata AS XML) xdata FROM claimextxml WHERE claimid = '16022E000000') AS t1 
CROSS APPLY xdata.nodes('/CLAIMCHECK') t(p) 
*/

SELECT 
   xdata.value('(./CLAIM_ROW/CLAIM_NUMBER)[1]', 'VARCHAR(10)') AS ClaimID
   --add more fields from node "CLAIM_ROW" in the same way
  ,DiagRow.value('DIAG_NO[1]','int') AS DIAG_NO
  ,DiagRow.value('DIAG_CODE[1]','varchar(max)') AS DIAG_CODE
  ,DiagRow.value('DX_CODING_SYS[1]','varchar(max)') AS DX_CODING_SYS
  ,LineRow.value('AMOUNT_PAID[1]','decimal(10,4)') AS AMOUNT_PAID
  ,LineRow.value('CHARGE[1]','decimal(10,4)') AS CHARGE
  --add more fields from node /CLAIM_ROW/LINE_GROUP/LINE_ROW in the same way
FROM (SELECT CAST(xmldata AS XML) xdata FROM claimextxml WHERE claimid = '16022E000000') AS t1 
CROSS APPLY xdata.nodes('/CLAIMCHECK/DIAG_GROUP/DIAG_ROW') AS A(DiagRow)
CROSS APPLY xdata.nodes('/CLAIMCHECK/LINE_GROUP/LINE_ROW') AS B(LineRow) 


--DROP TABLE claimextxml;

回答您更新后的问题:

SELECT 
   xdata.value('(/CLAIMCHECK/CLAIM_ROW/CLAIM_NUMBER)[1]', 'VARCHAR(100)') AS ClaimID, 
   STUFF((SELECT ', '+n.v.value('.','NVARCHAR(128)') FROM t.p.nodes('/CLAIMCHECK/DIAG_GROUP/DIAG_ROW/DIAG_CODE') AS n(v) FOR XML PATH('')),1,1,'') AS DIAGs,
   p.value('(CLAIM_LINE)[1]', 'VARCHAR(100)') AS ClaimLine,
   p.value('(PAY_PERCENT)[1]', 'VARCHAR(100)') AS PAY_PERCENT
FROM (SELECT CAST(xmldata AS XML) xdata FROM claimextxml WHERE claimid = '16022E000000') AS t1 
CROSS APPLY xdata.nodes('/CLAIMCHECK/LINE_GROUP/LINE_ROW') t(p)  

这会将 return DIAGS 作为逗号分隔列表。