Goede avond!
Ik zit even vast met een SQL query en zou wel een tip kunnen gebruiken om terug in de juiste richting te komen. Om de dienst accounting vooruit te helpen met het reconciliëren van een reeks financiële transacties, zijn er een hele reeks parameters waar rekening mee gehouden moet worden. Eén van die parameters zijn het aantal transacties die volgen op een initiële verkoop. Alle die losse transacties worden dagelijks afgeleverd in een vrij onoverzichtelijk bestand.
Om de accountants hun werk wat te vergemakkelijken werd beslist om de gegevens in Excel te behandelen, maar dat stootte onmiddellijk om een reeks problemen ivm de complexiteit van bepaalde excel functies, waardoor ze niet tot het gewenste resultaat kunnen komen.
Er werd me gevraagd om hiervoor een oplossing te bedenken in Excel, en ik ben de sheets gaan beschouwen als database tabellen. Er zit nu een vrij complex vba script achter al heel wat rapporten weet te generen mede dankzij SQL commandos.
Nu ben ik echter zelf tegen een probleempje opgebotst waar ik vandaag niet onmiddellijk een oplossing voor weet te vinden.
De hoofdtabel bestaat uit transacties zoals dit:
Dagelijks wordt die tabel bijgevuld met nieuwe transacties en er wordt dan ook een soort tijdelijke tabel gecreerd die de nieuwe transacties onderscheidt van de te updaten transacties.
De updates aan bestaan transactie bevatten bijvoorbeeld records zoals MYTEST4 voor de initiële transactie MYTEST.
Om bepaalde rapporten te genereren is het nodig om ten alle tijde het juiste aantal transacties, inclusief de initiële transactie bij te houden, omdat er enkele uitzonderingen niet mee mogen overgenomen worden, zoals wanneer men een T1107 transactie heeft en een transactie-count van 2.
In dit voorbeeld moet MYTEST 4 worden ipv 3. Hoe update ik dit?
Om het aantal transacties te tellen, gebruik ik dit SQL commando:
Het resultaat van dit commando is
MYTEST 3
Hoe kan ik via een SQL commando alle records in [Transactions$] update door een count te doen op het aantal transacties in [RAW] indien ze voorkomen in [Old_Transactions$] ?
Dit werkt zonder problemen, maar ipv '999' moet daar een count komen zoals in het SQL commando hierboven.
Ze combineren tot hetvolgende is natuurlijk fout en genereert een SQL error:
Is er iemand die me een tip kan geven om me op weg te helpen?
Ik ben me ervan bewust dat Excel niet dient om SQL commando's te draaien, maar bij gebrek aan betere tools, moet het via deze weg.
Alvast bedankt!
Cheers,
Syaoran
Ik zit even vast met een SQL query en zou wel een tip kunnen gebruiken om terug in de juiste richting te komen. Om de dienst accounting vooruit te helpen met het reconciliëren van een reeks financiële transacties, zijn er een hele reeks parameters waar rekening mee gehouden moet worden. Eén van die parameters zijn het aantal transacties die volgen op een initiële verkoop. Alle die losse transacties worden dagelijks afgeleverd in een vrij onoverzichtelijk bestand.
Om de accountants hun werk wat te vergemakkelijken werd beslist om de gegevens in Excel te behandelen, maar dat stootte onmiddellijk om een reeks problemen ivm de complexiteit van bepaalde excel functies, waardoor ze niet tot het gewenste resultaat kunnen komen.
Er werd me gevraagd om hiervoor een oplossing te bedenken in Excel, en ik ben de sheets gaan beschouwen als database tabellen. Er zit nu een vrij complex vba script achter al heel wat rapporten weet te generen mede dankzij SQL commandos.
Nu ben ik echter zelf tegen een probleempje opgebotst waar ik vandaag niet onmiddellijk een oplossing voor weet te vinden.
De hoofdtabel bestaat uit transacties zoals dit:
code:
1
2
3
4
5
6
7
| [DATA] SB MYTEST XXXXXXXXX T0006 2012/03/01 23:24:31 +0100 2012/03/01 23:24:31 +0100 DR 8378 CHF SB MYTEST2 MYTEST TXN T0200 2012/03/01 23:24:31 +0100 2012/03/01 23:24:31 +0100 CR 6768 EUR SB MYTEST3 MYTEST TXN T2103 2012/03/01 23:40:23 +0100 2012/03/01 23:40:23 +0100 DR 6768 EUR SB MYTEST4 MYTEST TXN T1107 2012/03/02 23:40:23 +0100 2012/03/02 23:40:23 +0100 DR 6768 EUR SB MYTEST5 XXXXXXXXX T0006 2012/03/01 23:24:31 +0100 2012/03/01 23:24:31 +0100 DR 8378 CHF |
Dagelijks wordt die tabel bijgevuld met nieuwe transacties en er wordt dan ook een soort tijdelijke tabel gecreerd die de nieuwe transacties onderscheidt van de te updaten transacties.
De updates aan bestaan transactie bevatten bijvoorbeeld records zoals MYTEST4 voor de initiële transactie MYTEST.
code:
1
2
3
4
| [Old_Transactions$] MYTEST MYTEST 2012/03/02 23:40:23 +0100 MYTEST5 MYTEST5 2012/03/03 23:40:23 +0100 |
Om bepaalde rapporten te genereren is het nodig om ten alle tijde het juiste aantal transacties, inclusief de initiële transactie bij te houden, omdat er enkele uitzonderingen niet mee mogen overgenomen worden, zoals wanneer men een T1107 transactie heeft en een transactie-count van 2.
code:
1
2
3
4
5
6
| [TRANSACTIONS$] 9YW98011BE624690A 3 9YW99244C79293032 3 MYTEST 3 MYTEST5 1 |
In dit voorbeeld moet MYTEST 4 worden ipv 3. Hoe update ik dit?
Om het aantal transacties te tellen, gebruik ik dit SQL commando:
code:
1
2
3
4
5
6
7
8
9
| SELECT DISTINCT C.[Transaction ID], ((SELECT DISTINCT COUNT(B.[PayPal Reference ID]) FROM [Data$] B WHERE B.[PayPal Reference ID] = C.[Transaction ID]) + iif(isnull(C.[PayPal Reference ID]),1,0)) FROM [Data$] C INNER JOIN [Old_Transactions$] N ON (N.[transaction_id] = C.[Transaction ID]) WHERE C.[PayPal Reference ID] IS NULL |
Het resultaat van dit commando is
MYTEST 3
Hoe kan ik via een SQL commando alle records in [Transactions$] update door een count te doen op het aantal transacties in [RAW] indien ze voorkomen in [Old_Transactions$] ?
Dit werkt zonder problemen, maar ipv '999' moet daar een count komen zoals in het SQL commando hierboven.
code:
1
| UPDATE [Transactions$] SET transactions_count = '999' WHERE paypal_reference_id IN (SELECT DISTINCT transaction_id FROM [Old_Transactions$]) |
Ze combineren tot hetvolgende is natuurlijk fout en genereert een SQL error:
code:
1
2
3
4
5
6
7
8
9
10
11
| UPDATE [Transactions$] SET transactions_count = (SELECT DISTINCT ((SELECT DISTINCT COUNT(B.[PayPal Reference ID]) FROM [Data$] B WHERE B.[PayPal Reference ID] = C.[Transaction ID]) + iif(isnull(C.[PayPal Reference ID]),1,0)) as transactions_count FROM [Data$] C INNER JOIN [Old_Transactions$] N ON (N.[transaction_id] = C.[Transaction ID]) WHERE C.[PayPal Reference ID] IS NULL) WHERE paypal_reference_id IN (SELECT DISTINCT transaction_id FROM [Old_Transactions$]) |
Is er iemand die me een tip kan geven om me op weg te helpen?
Ik ben me ervan bewust dat Excel niet dient om SQL commando's te draaien, maar bij gebrek aan betere tools, moet het via deze weg.
Alvast bedankt!
Cheers,
Syaoran