IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

XMLTABLE - Multiples enfants


Sujet :

SQL Oracle

  1. #1
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut XMLTABLE - Multiples enfants
    Forum,

    J'espère que vous allez bien malgré la chaleur. Moi, par contre, je chauffe mais je ne trouve pas.

    J'ai le xml suivant - c'est pour un dossier (les identifiants sont fictifs) :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    <FiscalHouseHoldResult>					
    	<FiscalHouseHold>				
    		<Beneficiary foreignFunctionary="false">77100519963</Beneficiary>			
    		<FiscalPartners>			
    			<FiscalPartner foreignFunctionary="false">75021319687</FiscalPartner>		
    		</FiscalPartners>			
    	</FiscalHouseHold>				
    	<ThresHoldPeriods>				
    		<ThresHoldPeriod>			
    			<Thresholds>		
    				<Threshold>	
    					<ThresholdAmount>31000.0</ThresholdAmount>
    					<BelowThresHold>false</BelowThresHold>
    				</Threshold>	
    				<Threshold>	
    					<ThresholdAmount>45000.0</ThresholdAmount>
    					<BelowThresHold>false</BelowThresHold>
    				</Threshold>	
    			</Thresholds>		
    			<ValidityPeriod>		
    				<StartDate>2020-01-01</StartDate>	
    				<EndDate>2020-02-29</EndDate>	
    			</ValidityPeriod>		
    		</ThresHoldPeriod>			
    		<ThresHoldPeriod>			
    			<Thresholds>		
    				<Threshold>	
    					<ThresholdAmount>31620.0</ThresholdAmount>
    					<BelowThresHold>false</BelowThresHold>
    				</Threshold>	
    				<Threshold>	
    					<ThresholdAmount>45900.0</ThresholdAmount>
    					<BelowThresHold>false</BelowThresHold>
    				</Threshold>	
    			</Thresholds>		
    			<ValidityPeriod>		
    				<StartDate>2020-03-01</StartDate>	
    				<EndDate>2020-12-31</EndDate>	
    			</ValidityPeriod>		
    		</ThresHoldPeriod>			
    	</ThresHoldPeriods>				
    </FiscalHouseHoldResult>					
    <FiscalHouseHoldResult>					
    	<FiscalHouseHold>				
    		<Beneficiary foreignFunctionary="false">77100519963</Beneficiary>			
    		<FiscalPartners>			
    			<FiscalPartner foreignFunctionary="false">75021319687</FiscalPartner>		
    			<FiscalPartner foreignFunctionary="false">77061189654</FiscalPartner>		
    		</FiscalPartners>			
    	</FiscalHouseHold>				
    	<ThresHoldPeriods>				
    		<ThresHoldPeriod>			
    			<Thresholds>		
    				<Threshold>	
    					<ThresholdAmount>31000.0</ThresholdAmount>
    					<BelowThresHold>false</BelowThresHold>
    				</Threshold>	
    				<Threshold>	
    					<ThresholdAmount>45000.0</ThresholdAmount>
    					<BelowThresHold>false</BelowThresHold>
    				</Threshold>	
    			</Thresholds>		
    			<ValidityPeriod>		
    				<StartDate>2020-01-01</StartDate>	
    				<EndDate>2020-02-29</EndDate>	
    			</ValidityPeriod>		
    		</ThresHoldPeriod>			
    		<ThresHoldPeriod>			
    			<Thresholds>		
    				<Threshold>	
    					<ThresholdAmount>31620.0</ThresholdAmount>
    					<BelowThresHold>false</BelowThresHold>
    				</Threshold>	
    				<Threshold>	
    					<ThresholdAmount>45900.0</ThresholdAmount>
    					<BelowThresHold>false</BelowThresHold>
    				</Threshold>	
    			</Thresholds>		
    			<ValidityPeriod>		
    				<StartDate>2020-03-01</StartDate>	
    				<EndDate>2020-12-31</EndDate>	
    			</ValidityPeriod>		
    		</ThresHoldPeriod>			
    	</ThresHoldPeriods>				
    </FiscalHouseHoldResult>

    Ce que je voudrais obtenir, c'est le résultat dans le premier tableau (en deux lignes) à la place du résultat du second tableau (en quatre lignes) :

    Nom : 2022-07-19 16 09 51.png
Affichages : 160
Taille : 14,5 Ko

    Ma requête est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    WITH xml_dat AS
    	(
    	SELECT 
    		imff.FILE_NUMBER AS FileN
    		,EXTRACT(XMLTYPE(IMFF.CONTENT ), '//Body/Response/FiscalHouseHoldResults/FiscalHouseHoldResult' ) AS XML_Revenus
    		,EXTRACT(XMLTYPE(IMFF.CONTENT ), '//Body/Response/FiscalHouseHoldResults/FiscalHouseHoldResult/FiscalHouseHold' ) AS XML_Couple
    		,EXTRACT(XMLTYPE(IMFF.CONTENT ), '//Body/Response/FiscalHouseHoldResults/FiscalHouseHoldResult/FiscalHouseHold' ) AS beneuro
     
    	FROM  inbox_messages_for_file imff
    	WHERE imff."TYPE" = 'T014'
    		AND to_char(imff.reception_date , 'yyyy') = 2022
    		AND imff.file_number   IN (3001233)
    	)
     
    SELECT 
    	*
     
     
    FROM xml_dat 
    , XMLTABLE('/FiscalHouseHold' PASSING xml_dat.XML_Couple
                 COLUMNS
                     Benef VARCHAR2(255) PATH './Beneficiary'
    ) x
     
    , XMLTABLE ( 
    '
    for $x in /FiscalHouseHoldResult
      for $y in $x/FiscalHouseHold
      let $z := string-join(
        for $zz in $y/FiscalPartners/FiscalPartner
        return $zz  
        , " - ")
      return $z
    '    
    PASSING xml_dat.XML_Revenus    
    COLUMNS
    Niss_Part          VARCHAR2(40) PATH '.'
    ) z
    ;

    Si vous pouvez m'aider alors je suis preneur car je retourne ce truc dans tout les sens sans arriver à quelque chose de concluant.


    NB : après avoir résolu ce problème, la prochaine étape sera d'ajouter les revenus et les périodes pour obtenir un des deux tableaux suivants (le second, c'est mieux évidemment) :

    Nom : 2022-07-19 16 17 50.png
Affichages : 157
Taille : 33,1 Ko

    Merci d'avance pour toutes vos idées...

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Essaie cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    select imff.FILE_NUMBER AS FileN,
           fiscahouseholdresults xml_revenus,
           FiscalHouseHold xml_couple,
           FiscalHouseHold beneuro,
           benef,
           niss_part
    from inbox_messages_for_file imff,
         xmltable('/body/response'
                  passing xmltype(imff.CONTENT)
                  columns fiscahouseholdresults xmltype path './FiscalHouseHoldResult'
                 ) res,
         xmltable('/FiscalHouseHoldResult'
                  passing res.fiscahouseholdresults
                  columns FiscalHouseHold xmltype path './FiscalHouseHold',
                          benef           number  path './FiscalHouseHold/Beneficiary',
                          niss_part       varchar2(4000) path 'string-join(./FiscalHouseHold/FiscalPartners/FiscalPartner, " - ")'
                 ) 
    where imff.type = 'T014'
      and imff.reception_date between to_date('01012022', 'ddmmyyyy') and to_date('31122022', 'ddmmyyyy')
      and imff.file_number   IN (3001233)        
      ;

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/04/2014, 23h19
  2. Requête Père-Enfant avec critères multiples sur enfants
    Par gtaman dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/10/2013, 21h57
  3. Réponses: 2
    Dernier message: 04/11/2011, 18h21
  4. [2008R2] Dimension hiérarchique parent/enfant multiple
    Par cire1383 dans le forum SSAS
    Réponses: 1
    Dernier message: 31/05/2011, 10h49
  5. [Tableaux] Programme de multiplication enfant
    Par isa150183 dans le forum Langage
    Réponses: 12
    Dernier message: 02/08/2006, 23h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo