• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Optelling uitvoeren via sql query

Status
Niet open voor verdere reacties.

rpad

Gebruiker
Lid geworden
1 mrt 2007
Berichten
26
Hoi allemaal, in een excel tool is het de bedoeling om uit een ander excel bestand (TW_targets.xlsx) targets uit een bepaalde kolom (TW_target_2019) te laten zien, via een sql query. Op zich gaat dat goed maar in de betreffende kolom staan collega's (PL/projectleiders) soms 2 x met een target, deze moeten dan worden opgeteld.

Hieronder de vba code:
Code:
Sub ReadTW()

  Dim sSQL As String
  On Error Resume Next
  
  Sheets("Dashboard").Range("TW_target").ClearContents
  sSQL = "Select TW_target_" & Worksheets("Dashboard").ComboBox_Jaar & " from [TW$A:AAA] WHERE PL = '" & Worksheets("Dashboard").Projectleider.Value & "'"
  Call readSQL(sSQL, 3, Sheets("Dashboard").Range("TW_target"), False, "C:\TW_targets.xlsx")

  On Error GoTo 0

End Sub

De oplossing ligt volgens mij in het gebruik van SUM, echter heb ik al diverse pogingen gedaan, zonder succes....
 
Laatst bewerkt:
De syntax voor een sommatie in SQL is:

SELECT sum(fieldname1), FieldnameAgregate1, FieldnameAgregate2
FROM tablename
WHERE criteria
GROUP BY FieldnameAgregate
HAVING criteria on group

waar fieldname1 de naam van het veld is waarvan de warden moeten opgeteld worden
FieldnameAgregate(n) de namen van de velden waarop gegroepeerd wordt
in de WHERE (optioneel) de conditie staat die moet geëvalueerd worden voor de individuele elementen voor men gaat groeperen
GROUP BY: alle veldnamen waarop gegroepeerd wordt
HAVING (optioneel): de conditie die op het groepstotaal wordt geëvalueerd

Vriendelijke groeten
Noëlla
 
Dan krijg je zoiets:
Code:
sSQL = "Select Sum(TW_target_" & Worksheets("Dashboard").ComboBox_Jaar) & ", PL  FROM [TW$A:AAA] WHERE PL = """ & Worksheets("Dashboard").Projectleider.Value & """ Group By PL"
1. Call mag je weglaten
2. Vermijd enkelvoudige aanhalingstekens maar gebruik dubbele
 
Thnx Octafish, alleen komt hij toch nog met een compileerfout: verwacht instructie einde ( achter ComboBox_Jaar) ?)
 
Er staan nog enkele aanhalingstekens rond Dashboard. Probeer deze te vervangen door dubbele. Als dit niet werkt kan je de waarden uit deze cellen ook eerst in variabelen opslaan die je dan in de opbouw van de SQL string gebruikt. Zo ben je zeker van het juiste datatype.
 
Hm ik ben er nog niet uit, zonder SUM werkt de query namelijk uitstekend(!) en worden de bijbehorende getallen keurig weergegeven, alléén omdat heel soms een dubbele invoer bestaat wil ik dat deze worden opgeteld, ter verduidelijk onderstaand een voorbeeld tabel van TW_targets.xlsx waar de brongegevens dus in staan

Code:
[table="width: 500"]
[tr]
	[td]PL[/td]
	[td]klant[/td]
	[td]TW_target_2019[/td]
[/tr]

[tr]
	[td]Jaap[/td]
	[td]den haag[/td]
	[td]500[/td]
[/tr]
[tr]
	[td]Piet[/td]
	[td]almere[/td]
	[td]1000[/td]
[/tr]
[tr]
	[td]Nicole[/td]
	[td]apeldoorn[/td]
	[td]250[/td]
[/tr]
[tr]
	[td]Nicole[/td]
	[td]den haag[/td]
	[td]1000[/td]
[/tr]
[/table]

De bedoeling is dat bij Nicole dus 1250 het resultaat is
 
Dag rpad,
waarschijnlijk heeft een excel query een naam nodig voor elk veld.
Probeer eens:
sSQL = "Select Sum(TW_target_" & Worksheets("Dashboard").ComboBox_Jaar) & ", as MyResult
 
Hmm, geen foutmelding (als ik tenminste het haakje achter Combobox_Jaar weghaal (anders komt hij toch nog met een compileerfout: verwacht instructie einde).

Maar ook geen resultaat (het resultaat veld blijft dus leeg)
 
Laatst bewerkt:
Wat goed werkt is de query in MSQuery maken (of beter nog, in MSAccess), kan je vervolgens de SQL kopieren.
 
Een alternatief is om PowerQUery te gebruiken, die heeft ook een Pivot functie.
 
Dank allen voor de tips maar helaas ben ik er nog niet uit. Ook met een vereenvoudiging van de query (elke collega met de bijbehorende gegevens nu op een apart tabblad) geplaatst werkt ie nog niet:

Code:
Sub ReadTW()

  Dim sSQL As String
  On Error Resume Next
  
  Sheets("Dashboard").Range("TW_target").ClearContents
  sSQL = "Select TW_target_" & Worksheets("Dashboard").ComboBox_Jaar & " from [Nicole$A:AAA]"
  Call readSQL(sSQL, 3, Sheets("Dashboard").Range("TW_target"), False, "C:\tw_test.xlsx")

  On Error GoTo 0

End Sub

Wat hij nu doet is alle data van Nicole onder elkaar weergeven (lijst van enkele tientallen getallen, nu ontbreekt dus nog steeds de laatste stap dat het bij elkaar wordt opgeteld . .
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan