xml из ms SQL

 
0
 
XML, XSL
ava
faraon25 | 12.12.2016, 20:37
Помогите пожалуйста, нужно из селекта к базе данных получить xml файл определенной структуры. я сделал но чуть не так как надо 

<?xml version="1.0" encoding="Windows-1251"?>
<ZL_LIST>
  <ZGLV>
    <VERSION>2.1</VERSION>
    <DATA>2015-08-10</DATA>
    <OKATO_OMS>35000</OKATO_OMS>
  </ZGLV>
  <SCHET>
    <YEAR>2015</YEAR>
    <MONTH>6</MONTH>
    <NSCHET>416</NSCHET>
    <DSCHET>2015-08-10</DSCHET>
    <SUMMAV>6246239.25</SUMMAV>
    <SUMMAP>4462829.02</SUMMAP>
    <SANK_MEK>1362435.65</SANK_MEK>
    <SANK_MEE>0.00</SANK_MEE>
    <SANK_EKMP>0.00</SANK_EKMP>
  </SCHET>
  <ZAP>
    <N_ZAP>398</N_ZAP>
    <PACIENT>
      <VPOLIS>3</VPOLIS>
      <NPOLIS>8590099727000144</NPOLIS>
    </PACIENT>
    <SLUCH>
      <IDCASE>656</IDCASE>
      <NHISTORY>2152</NHISTORY>
      <IDSP>29</IDSP>
      <ED_COL>1.00</ED_COL>
      <TARIF>452.79</TARIF>
      <SUMV>452.79</SUMV>
      <OPLATA>1</OPLATA>
      <SUMP>452.79</SUMP>
    </SLUCH>
  </ZAP>
  <ZAP>
    <N_ZAP>1055</N_ZAP>
    <PACIENT>
      <VPOLIS>3</VPOLIS>
      <NPOLIS>8556210833000421</NPOLIS>
    </PACIENT>
    <SLUCH>
      <IDCASE>1743</IDCASE>
      <NHISTORY>118519</NHISTORY>
      <IDSP>29</IDSP>
      <ED_COL>1.00</ED_COL>
      <TARIF>179.41</TARIF>
      <SUMV>179.41</SUMV>
      <OPLATA>1</OPLATA>
      <SUMP>179.41</SUMP>
    </SLUCH>
  </ZAP>
  <ZAP>
    <N_ZAP>625</N_ZAP>
    <PACIENT>
      <VPOLIS>3</VPOLIS>
      <NPOLIS>8558010877000065</NPOLIS>
    </PACIENT>
    <SLUCH>
      <IDCASE>1033</IDCASE>
      <NHISTORY>119738</NHISTORY>
      <IDSP>29</IDSP>
      <ED_COL>1.00</ED_COL>
      <TARIF>179.41</TARIF>
      <SUMV>179.41</SUMV>
      <OPLATA>2</OPLATA>
      <SUMP>0.00</SUMP>
      <SANK_IT>179.41</SANK_IT>
      <COMENTSL>Нарушения, связанные с определением принадлежности застрахованного лица к страховой медицинской организации: введение в реестр счетов недостоверных персональных данных застрахованного лица, приводящее к невозможности его полной идентификации (ошибки </COMENTSL>
      <SANK>
        <S_CODE>BD2EA917-98D7-4728-95ED-49ED149AEA4A</S_CODE>
        <S_SUM>179.41</S_SUM>
        <S_TIP>1</S_TIP>
        <S_OSN>57</S_OSN>
        <S_COM>Нарушения, связанные с определением принадлежности застрахованного лица к страховой медицинской организации: введение в реестр счетов недостоверных персональных данных застрахованного лица, приводящее к невозможности его полной идентификации (ошибки </S_COM>
        <S_IST>2</S_IST>
      </SANK>
    </SLUCH>
    <SLUCH>
      <IDCASE>1034</IDCASE>
      <NHISTORY>119738</NHISTORY>
      <IDSP>29</IDSP>
      <ED_COL>1.00</ED_COL>
      <TARIF>179.41</TARIF>
      <SUMV>179.41</SUMV>
      <OPLATA>2</OPLATA>
      <SUMP>0.00</SUMP>
      <SANK_IT>179.41</SANK_IT>
      <COMENTSL>Нарушения, связанные с определением принадлежности застрахованного лица к страховой медицинской организации: введение в реестр счетов недостоверных персональных данных застрахованного лица, приводящее к невозможности его полной идентификации (ошибки </COMENTSL>
      <SANK>
        <S_CODE>CE619B60-6CDB-4120-881D-CFCB8C9D7742</S_CODE>
        <S_SUM>179.41</S_SUM>
        <S_TIP>1</S_TIP>
        <S_OSN>57</S_OSN>
        <S_COM>Нарушения, связанные с определением принадлежности застрахованного лица к страховой медицинской организации: введение в реестр счетов недостоверных персональных данных застрахованного лица, приводящее к невозможности его полной идентификации (ошибки </S_COM>
        <S_IST>2</S_IST>
      </SANK>
    </SLUCH>
  </ZAP>
  <ZAP>
    <N_ZAP>797</N_ZAP>
    <PACIENT>
      <VPOLIS>3</VPOLIS>
      <NPOLIS>8556520894000395</NPOLIS>
    </PACIENT>
    <SLUCH>
      <IDCASE>1319</IDCASE>
      <NHISTORY>43380</NHISTORY>
      <IDSP>29</IDSP>
      <ED_COL>1.00</ED_COL>
      <TARIF>301.65</TARIF>
      <SUMV>301.65</SUMV>
      <OPLATA>1</OPLATA>
      <SUMP>301.65</SUMP>
    </SLUCH>
  </ZAP>

 
нужно такую структуру как выше
а у меня в запросе 

select
           --ZGLV
         o.VER_ID as 'ZGLV/VERSION',
          o.XML_DATE AS 'ZGLV/DATA',
          o.XML_NAME AS 'ZGLV/NAME',
      
                --SCHET
            o.CODE AS 'SCHET/CODE',
            o.CODE_MO AS 'SCHET/CODE_MO',
            o.YEAR AS 'SCHET/YEAR',
            o.MONTH as 'SCHET/MONTH',
            o.NSCHET as 'SCHET/NSCHET',
            o.DSCHET as 'SCHET/DSCHET',
            o.PLAT AS 'SCHET/PLAT',
            o.SUMMAV AS 'SCHET/SUMMAV',
            o.COMENTS AS 'SCHET/COMENTS',
            o.SUMMAP AS 'SCHET/NSCHET',
            o.SUMMA_PF AS 'SCHET/SUMMA_PF',
            o.SANK_MEK AS 'SCHET/SANK_MEK',
            o.SANK_MEE AS 'SCHET/SANK_MEE',
            o.SANK_EKMP AS 'SCHET/SANK_EKMP',
         
             
        
            --ZAP
  
  (select
         z.N_ZAP AS 'N_ZAP',
         z.PR_NOV AS 'PR_NOW',
                 --PACIENT
                  (select
                       p.ID_PAC as 'ID_PAC',
                       z.VPOLIS as 'VPOLIS',
                       z.SPOLIS as 'SPOLIS',
                       z.NPOLIS as 'NPOLIS',
                       --st_okato????
                       z.SMO as 'SMO',
                       z.SMO_OGRN as 'SMO_OGRN',
                       --SMO_OK?????
                       --SMO_NAM??
                       z.NOVOR as 'NOVOR',
                       z.VNOV_D as 'VNOV_D'
                       
                   FOR
                   XML PATH('PACIENT'),
                   TYPE),
                 --SLUCH
                  (select
                       
                        t.IDCASE as 'IDCASE',
                        t.USL_OK as 'USL_OK',
                        t.VIDPOM as 'VIDPOM',
                        t.FOR_POM as 'FOR_POM',
                       -- t.NPR_N as 't.NPR_N',
                        t.NPR_MO as 'NRP_MO',
                        t.EXTR as 'EXTR',
                        t.LPU as 'LPU',
                        t.LPU_1 as 'LPU_1',
                        t.PODR as 'PODR',
                        t.PROFIL as 'PROFIL',
                       -- t.PROFIL_BED as 'PROFIL_BED',
                        t.DET as 'DET',
                        t.NHISTORY as 'NHISTORY',
                        t.DATE_1 as 'DATE_1',
                        t.DATE_2 as 'DATE_2',
                         ---DATEDIFF(DD, t.DATE_1, t.DATE_2 ) AS 'ED_COL',
                        t.DS0 as 'DS0',
                        t.DS1 as 'DS1',
                        --DS2 as 'DS2'????
                        --DS3 as 'DS3'????
                        --us.DS as 'DS',
                        --VNOV_M as 'VNOV_M',
                        --CODE_MES1 as 'CODE_MES1',
                        --CODE_MES2 as 'CODE_MES2',
                        
                        t.RSLT as 'RSLT',
                        t.ISHOD as 'ISHOD',
                        us.PRVS as 'PRVS',
                        t.VERS_SPEC as 'VERS_SPEC',
                        t.IDDOKT  as 'IDDOKT',
                       -- t.OS_SLUCH as 'OS_SLUCH',
                        t.IDSP as 'IDSP',
                        t.ED_COL as 'ED_COL',
                        t.TARIF as 'TARIF',
                        t.SUMV as 'SUMV',
                        t.OPLATA as 'OPLATA',
                        t.SUMP as 'SUMP',
                        t.SANK_IT as 'SANK_IT',
                       
                        ---SANK
                             (select
                             s.S_CODE as 'S_CODE',
                             s.S_SUM as 'S_SUM',
                             s.S_TIP as 'S_TIP',
                             s.S_OSN as 'S_OSN',
                             s.S_COM as 'S_COM',
                             s.S_IST as 'S_IST'
                                                    
                         FOR
                   XML PATH('SANK'),
                   TYPE),
                       --USL
                        (select
                      us.IDSERV as 'IDSERV',
                      us.LPU as 'LPU',
                      us.LPU_1 as 'LPU_1',
                      us.PODR as 'PODR',
                      us.PROFIL as 'PROFIL',
                      --us.PROFIL_BED as 'PROFIL_BED',
                      us.VID_VME as 'VID_VME',
                      us.DET as 'DET',
                      --us.DATA_IN as 'DATA_IN',
                      --us.DATA_OUT as 'DATA_OUT',
                      us.DS as 'DS',
                      us.CODE_USL as 'CODE_USL',
                      us.KOL_USL as 'KOL_USL',
                      --us.OPERATION as 'OPERATION',
                      --us.TOOTH as 'TOOTH',
                      us.TARIF as 'TARIF',
                      us.SUMV_USL as 'SUMV_USL',
                      us.PRVS as 'PRVS',
                      us.CODE_MD as 'CODE_MD',
                      us.COMENTU as 'COMENTU'
                     
                   FOR
                   XML PATH('USL'),
                   TYPE)    
                  
                   FOR
                   XML PATH('SLUCH'),
                   TYPE) FOR XML PATH('ZAP'), TYPE)    
  
    
       
       from TFOMSRK_1026.dbo.RSTR_OMS_XXX_SLUCH t
left join TFOMSRK_1026.dbo.RSTR_OMS_OPL_SCHET o on o.CODE=t.CODE
left join TFOMSRK_1026.dbo.RSTR_OMS_XXX_SANK s on s.CODE=o.CODE
left join TFOMSRK_1026.dbo.RSTR_OMS_XXX_ZAP z on z.CODE=o.CODE and t.N_ZAP=z.N_ZAP
left join TFOMSRK_1026.dbo.RSTR_OMS_XXX_PAC p on p.CODE=o.CODE and p.ID_PAC=z.ID_PAC
left join TFOMSRK_1026.dbo.RSTR_OMS_XXX_USL us on (us.IDCASE=t.IDCASE and us.CODE=o.CODE and us.N_ZAP=z.N_ZAP   and t.LPU=us.LPU)
--inner join TEMP.dbo.SEVAST s on rtrim(s.FAM)=Upper(rtrim(p.FAM)) and rtrim(s.IM)=Upper(rtrim(p.IM)) and rtrim(s.OT)=Upper(rtrim(p.OT)) and s.dr=p.dr
LEFT JOIN TFOMSRK_1026.DBO.NSI_V002         V02 ON V02.ID = t.PROFIL

LEFT JOIN TFOMSRK_1026.DBO.NSI_V006         V06 ON V06.ID = t.USL_OK
LEFT JOIN TFOMSRK_1026.DBO.NSI_V009         V09 ON V09.ID = t.RSLT AND V09.USL_OK = t.USL_OK
--LEFT JOIN TFOMSRK_1026.dbo.NSI_LPUP p1 on p1.CodeMO=t.LPU
where o.CODE in ('8791') and o.MONTH BETWEEN 1 AND 12  and t.USL_OK in (1,2) and o.CODE_MO is not null
order by o.MONTH,  z.SMO,o.DSCHET


FOR XML PATH(''),
ROOT ('ZL_LIST')

не выходит так как надо,
у меня <ZL_LIST>
  <ZGLV>...  </ZGLV>
  <SCHET>...</SCHET>
  <ZAP>...</ZAP>
<ZGLV>...  </ZGLV>
  <SCHET>...</SCHET>
  <ZAP>...</ZAP>
<ZGLV>...  </ZGLV>
  <SCHET>...</SCHET>
  <ZAP>....</ZAP>
</ZL_LIST>

а должно быть вот так
<ZL_LIST>
  <ZGLV>...  </ZGLV>
  <SCHET>...</SCHET>
  <ZAP>...</ZAP>
 <ZAP>...</ZAP>
  <ZAP>....</ZAP>
</ZL_LIST>

что не так в моем запросе????
Kommentare (0)

Kommentare werden nicht hinzugefügt

Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden