Dim dt As Date
dt = #12/31/2999 11:00:00 AM#
RECSET2.Open "select distinct sup.CD_RGA, sup.LB_COURT, sum(MT_EA) as EA_total" & _
" from SEA_SUPPORT sr left join (select is_support,is_rga,d_fin_bis as COALESCE(d_fin,dt) from SUPPORT_RGA2 group by is_support,is_rga,d_fin having max(d_fin_bis) = (d_fin_bis)) drsupp" & _
" on sr.is_support=drsupp.is_support left join RGA sup on drsupp.IS_RGA=sup.IS_RGA" & _
case d_fin when NULL then #12/31/2999 11:00:00 AM# else d_fin end
Dim dt As string
dt = "12/31/2999 11:00:00 AM"
Sql= "Select COALESCE(NULL,NULL,TO_DATE('" & dt & "','mm/DD/YYYY HH:MI:SS AM')) as d_fin_bis from FROM DUAL;"
Merci beaucoup ! Si je veux remplacer toutes les valeurs manquantes il faut utiliser case when ?Bonsoir,
COALESCE retourne la première occurrence non NULL d'un tableau de valeur!
exemple:
COALESCE(d_fin,To_DATE('" & dt & "','mm/DD/YYYY HH:MI:SS AM')) as d_fin_bis
Tu envoies un message aux générations futures ?12/31/2999 11:00:00 AM
Merci beaucoup ! Si je veux remplacer toutes les valeurs manquantes il faut utiliser case when ?
Non COALESCE fonction pour toutes les lignes
VB:COALESCE(d_fin,To_DATE('" & dt & "','mm/DD/YYYY HH:MI:SS AM')) as d_fin_bis
En revanche je n'arrive pas à comprendre comment on peut avoir un DISTINCT, un SUM , un GRIUP BY et un HAVING dans la même requête ?
Le DISTING est entinomique avec une requête de statistique !
Tu envoies un message aux générations futures ?
Les terriens parlent aux marsiens.
En fait, j’ai plusieurs d_fin par is_support. S’il y a la d_fin à vide je dois la choisir, sinon je prends la d_fin la plus récente. Pour cela je veux remplacer la d_fin vide par une date future afin d’appliquer MAX pour choisir la date. J’ai une requête qui marche sur SAS mais je n’arrive pas à la traduire en VBA.Non COALESCE fonction pour toutes les lignes
VB:COALESCE(d_fin,To_DATE('" & dt & "','mm/DD/YYYY HH:MI:SS AM')) as d_fin_bis
En revanche je n'arrive pas à comprendre comment on peut avoir un DISTINCT, un SUM , un GRIUP BY et un HAVING dans la même requête ?
Le DISTING est entinomique avec une requête de statistique !
Tu envoies un message aux générations futures ?
Les terriens parlent aux marsiens.
select COALESCE(NULL,(select max(frm2.d_fin) from [SUPPORT_RGA2] FRM2 WHERE FRM2.[is_support] =FRM1.[is_support]) ,'Pas Trouvé')grr from [SUPPORT_RGA2] FRM1
Bonjour,
cette exemple je l'ai créé sur Sql Serveur j'ai pas Oracle!
VB:select COALESCE(NULL,(select max(frm2.d_fin) from [SUPPORT_RGA2] FRM2 WHERE FRM2.[is_support] =FRM1.[is_support]) ,'Pas Trouvé')grr from [SUPPORT_RGA2] FRM1
Merci, je doute sur la COALESCE(NULL,(select max(frm2.d_fin)). En faite, je voulais remplacer tout d'abord les valeurs manquantes par 31/12/2999 est ensuite faire applique max par is_support.Si cette requête fonction sur sql manager elle devrait fonctionner dans VBA bien sur il faut remplacer les doubles côte ["]par des simples côté [']
La date la plus récente ou la date avec la valeur manquante. Je peux avoir aussi, par exemple, la d_fin pour un is_support comme 13/09/2021 00:00:00 . (NULL) . (NULL) 13/09/2021 : dans ce cas je dois retenir les deux lignes avec les valeurs manquantes.En fait ce n'es pas là max qu tu veux mais la dernière même si elle est nulle?
proc sql;
create table OL as select distinct c.cd_rga, c.lb_court as Libelle_rga,
sum(a.mt_ea) as EA_total
from SEA_SUPPORT as a
left join (select is_support,d_fin, is_rga,
case d_fin when . then '31DEC2999:00:00:00'dt else d_fin
end as d_fin_bis format datetime20.
from SUPPORT_RGA2
group by is_support having max(d_fin_bis) = (d_fin_bis)) as b
on a.is_support=b.is_support
left join RGA as c on b.is_rga=c.is_rga
where a.s_type_support="UC" and substr(a.police,1,1) ne "Z"
group by c.cd_rga
;
quit;
Merci, je doute sur la COALESCE(NULL,(select max(frm2.d_fin)). En faite, je voulais remplacer tout d'abord les valeurs manquantes par 31/12/2999 est ensuite faire applique max par is_support.
Par exemple pour IS_SUPPORT 10234 je peux avoir d_fin "23/12/2001 00:00:00, 19/12/2000 00:00:00, 03/09/2022 00:00:00 et . (NULL). Dans ce cas je dois choisir le . (la ligne avec la valeur NULL).
Sub test()
Dim dt As String, Rs As Object
dt = "12/31/2999 11:00:00 AM"
Sql = "Select COALESCE(NULL,NULL,TO_DATE('" & dt & "','mm/DD/YYYY HH:MI:SS AM')) as d_fin_bis from FROM DUAL;"
Set Rs = ConnectionOracle.Execute(Sql)
End Sub
Merci ! J'aurais une question : pourquoi dans COALESCE(NULL,NULL,TO_DATE('" & dt & "','mm/DD/YYYY HH:MI:SS AM')) la colonne d_fin n'est pas indiquée ? En fait, je voulais lire les valeur du champs d_fin et remplacer la valeur manquante par 12/31/2999 11:00:00 AM.bonjour,
essai d'exécuter le code poste #2 avec ta connexion Oracle!
tu peux faire un Clik droit sur RS et dans le menu tu sélectionnes ajouter à l'espionVB:Sub test() Dim dt As String, Rs As Object dt = "12/31/2999 11:00:00 AM" Sql = "Select COALESCE(NULL,NULL,TO_DATE('" & dt & "','mm/DD/YYYY HH:MI:SS AM')) as d_fin_bis from FROM DUAL;" Set Rs = ConnectionOracle.Execute(Sql) End Sub
execute en pas à pas touche [F8]
J'ai exécuté cette ligne mais elle ne marche pas : RECSET2.Open "select distinct drsupp.is_support, COALESCE(d_fin,NULL,TO_DATE('" & dt & "','mm/DD/YYYY HH:MI:SS AM')) as d_fin_bis " & _ ...bonjour,
essai d'exécuter le code poste #2 avec ta connexion Oracle!
tu peux faire un Clik droit sur RS et dans le menu tu sélectionnes ajouter à l'espionVB:Sub test() Dim dt As String, Rs As Object dt = "12/31/2999 11:00:00 AM" Sql = "Select COALESCE(NULL,NULL,TO_DATE('" & dt & "','mm/DD/YYYY HH:MI:SS AM')) as d_fin_bis from FROM DUAL;" Set Rs = ConnectionOracle.Execute(Sql) End Sub
execute en pas à pas touche [F8]