Sinon, je te laisse faire la XSD, mais à la limite, si je me suis pas planté, ma requête peut être traduite en XML de cette façon :
<sql>
<query>
<selectClause>
<fields>
<field type="subQuery" alias="curprx">
<query>
<selectClause>
<fields>
<field type="function" name="max">
<functionParameters>
<field type="field" name="prix" table="tsc"/>
</functionParameters>
</field>
</fields>
<tables>
<table type="table" name="tsc"/>
</tables>
<filters>
<clause opperation="EQUAL">
<field type="field" name="codsoc" table="tsc"/>
<field type="field" name="codsoc" table="pro"/>
</clause>
<opperator type="AND"/>
<clause opperation="EQUAL">
<field type="field" name="achvte" table="tsc"/>
<field type="constant" sqlType="varchar" value="A"/>
</clause>
<opperator type="AND"/>
<clause opperation="EQUAL">
<field type="field" name="codpro" table="tsc"/>
<field type="field" name="codpro" table="pro"/>
</clause>
<opperator type="AND"/>
<clause opperation="BETWEEN">
<field type="function" name="getdate"/>
<field type="function" name="nvl">
<functionParameters>
<field type="field" name="datdeb" table="tsc"/>
<field type="function" name="getdate"/>
</functionParameters>
</field>
<field type="function" name="nvl">
<functionParameters>
<field type="field" name="datfin" table="tsc"/>
<field type="function" name="getdate"/>
</functionParameters>
</field>
</clause>
</filters>
</selectClause>
</query>
</field>
<field type="field" name="codpro" table="pro"/>
<field type="field" name="nompro" table="tmpprm"/>
<field type="field" name="nomtie" table="fou"/>
</fields>
<tables>
<table type="subQuery" alias="tmpprm">
<query>
<selectClause directive="TOP" directiveParameter="1">
<fields>
<field type="field" name="nompro"/>
</fields>
<tables>
<table type="subQuery" alias="tmp1prm">
<query>
<selectClause>
<fields>
<field type="field" name="nompro"/>
</fields>
<selectClause>
<tables>
<table type="table" name="prm"/>
</tables>
<filters>
<clause opperation="EQUAL">
<field type="field" name="codsoc" table="prm"/>
<field type="field" name="codsoc" table="pro"/>
</clause>
<opperator type="AND"/>
<clause opperation="EQUAL">
<field type="field" name="codpro" table="prm"/>
<field type="field" name="codpro" table="pro"/>
</clause>
<opperator type="AND"/>
<clause opperation="EQUAL">
<field type="field" name="codlan" table="prm"/>
<field type="field" name="codlan" table="fou"/>
</clause>
</filters>
</query>
<statement type="UNION"/>
<query>
<selectClause>
<fields>
<field type="field" name="nompro"/>
</fields>
<selectClause>
<tables>
<table type="table" name="pro" alias="p"/>
</tables>
<filters>
<clause opperation="EQUAL">
<field type="field" name="codsoc" table="pro"/>
<field type="field" name="codsoc" table="p"/>
</clause>
<opperator type="AND"/>
<clause opperation="EQUAL">
<field type="field" name="codpro" table="pro"/>
<field type="field" name="codpro" table="p"/>
</clause>
</filters>
</query>
</table>
</tables>
</selectClause>
</query>
</table>
<table type="table" name="tie" alias="fou"/>
<table type="table" name="pro">
</tables>
<filters>
<clause opperation="EQUAL">
<field type="field" name="codsoc" table="pro"/>
<field type="variable" name="codsoc"/>
</clause>
<opperator type="AND"/>
<clause opperation="EQUAL">
<field type="field" name="codpro" table="pro"/>
<field type="variable" name="codpro"/>
</clause>
<opperator type="AND"/>
<clause opperation="EQUAL">
<field type="field" name="codsoc" table="fou"/>
<field type="field" name="codsoc" table="pro"/>
</clause>
<opperator type="AND"/>
<clause opperation="EQUAL">
<field type="field" name="typtie" table="fou"/>
<field type="constant" sqlType="varchar" value="FOU"/>
</clause>
<opperator type="AND"/>
<clause opperation="EQUAL">
<field type="field" name="sigtie" table="fou"/>
<field type="field" name="sigfou" table="pro"/>
</clause>
</filters>
</selectClause>
</query>
</sql>
|
A noter que ma sous-requête dans le FROM l'empêche d'être jointe avec les autres tables avec une clause "inner join" classique.
Par contre, avec les "outer join", certaines choses sont impossibles à faire sans l'utilisation de la syntaxe littérale. Rien que pour ça, c'est limite impossible de modéliser ton truc (j'en ai fait que la moitié dans mon exemple)
Je ne parle pas non plus des imbrications d'oppérateurs pour les filtres (gestions de parenthèses), etc.
Je te laisse t'amuser ne serait-ce que pour écrire le XSD. Niveau structure, je pense être resté cohérent, et y'a pas de niveau de trop...
Franchement, reviens sur Terre : tu peux partir dans un truc bancale qui permet de stocker tes 3 requêtes. Mais si c'est pour faire un prog boîteux, incapable de tirer profit de cet éclatement de la requête (pkoi tu veux passer en XML d'abors ?) et ne pas être capable de gérer tous les cas, autant rester au niveau du fichier texte. Ca marche tout aussi bien