Avatar billede xane Nybegynder
13. februar 2015 - 14:37 Der er 7 kommentarer

Opdeling af hent i database i kolonner

Hej har nedenstående database, hvor jeg har summeret tallene indenfor hver time i en SQL query.

Databasen ser således ud:

IDKode  Dato                Forbrug
52609    24-10-2013 16:07    4
51468    24-10-2013 16:07    10
49786    24-10-2013 16:07    7
.
52609    24-10-2013 16:22    2
51468    24-10-2013 16:22    3
49786    24-10-2013 16:22    12
.
52609    24-10-2013 16:37    1
51468    24-10-2013 16:37    5
49786    24-10-2013 16:37    4
.
52609    24-10-2013 16:52    0
51468    24-10-2013 16:52    0
49786    24-10-2013 16:52    2
.
52609    24-10-2013 17:07    2
51468    24-10-2013 17:07    0
49786    24-10-2013 17:07    3

SQL-query:
SELECT AllData_corr.IDKode, Format([AllData_corr]![Dato],"yyyy-mm-dd hh") AS Dato, Sum(AllData_corr.Forbrug) AS Forbrug
FROM AllData_corr
GROUP BY AllData_corr.IDKode, Format([AllData_corr]![Dato],"yyyy-mm-dd hh");

Men jeg vil gerne hvis min SQL-query kan skrive dato'en til venstre også hvert enkelt IDKode i hver kolonne, som så summere forbruget for hver time.

Og derefter printe det til excel (dette tror jeg, jeg har løst).
Avatar billede Slettet bruger
13. februar 2015 - 16:44 #1
TRANSFORM Nz(Sum([AllData_Corr]![Forbrug]),0) AS Forbrug
SELECT Format([AllData_corr]![Dato],"yyyy-mm-dd") AS Dato, Format([AllData_corr]![Dato],"hh") AS [Time]
FROM AllData_corr
GROUP BY Format([AllData_corr]![Dato],"yyyy-mm-dd"), Format([AllData_corr]![Dato],"hh")
ORDER BY Format([AllData_corr]![Dato],"yyyy-mm-dd"), Format([AllData_corr]![Dato],"hh")
PIVOT AllData_corr.IDKode In (49786,51468,52609);

Kolonnerne er ikke dynamiske, så hvis du får flere IDKoder, så skal du tilføje dem manuelt til forespørgslen.

Man kan lave det dynamisk, men det er besværligt!~)
Avatar billede xane Nybegynder
13. februar 2015 - 17:55 #2
Hvor meget mere besværligt? :-)

Jeg har nemlig omkring 30 IDkoder, som over tid (2 år) også godt kan ændre sig lidt, så jeg ville gerne være sikker på at jeg har alt med når jeg indhenter data'erne til Excel hver gang.

Alternativt skal jeg lave et udtræk hvergang af ID'erne også sammenligne med sidste gang :-(

Kan du desuden give en forklaring af hvad det er du gør i ovenstående SQL query? Det kunne nok godt hjælpe mig en del ift. fremtiden :-)
Avatar billede xane Nybegynder
13. februar 2015 - 17:58 #3
Alternativt kunne jeg måske linke de IDkoder der skal hentes ind til nogle celler i Excel? Via noget Worksheet.Range("B2:H2").value?

Kunne man gøre ovenstående, altså flette det ind i SQL-sætningen?
Avatar billede Slettet bruger
15. februar 2015 - 17:05 #4
Hej, jeg har haft forrygende travlt denne weekend og nu starter en ny fuld uge!~)

Jeg ville nok bruge VBA til først at opdatere forespørgslen med kolonner ved at loope igennem de idkoder, som er i datasættet.

Herefter kan man sende output til Excel.

Indtil videre kan du bruge den forespørgsel, som skal opdateres manuelt. Hvis jeg får tid i løbet af ugen og du ikke har fået hjælp af andre, så skal jeg se om jeg kan have et kig på det!~)
Avatar billede xane Nybegynder
17. februar 2015 - 09:58 #5
Ser frem til at modtage noget fra dig :-)

Til info virker Nz() ikke i VBA excel, men man kan istedet bruge Iif(), som gør det sammen.
Avatar billede xane Nybegynder
19. marts 2015 - 12:38 #6
Hejsa

Havde du tid til at se på en løsning til mig ift. ovenstående?
Avatar billede xane Nybegynder
19. marts 2015 - 12:58 #7
Hej Igen

Min kode ser nu sådan her ud:

strSQL = "TRANSFORM Iif(Sum([AllData]![Forbrug]) is null,0,Sum([AllData]![Forbrug]) / 4) AS Forbrug " & _
"SELECT Format([AllData]![Dato],'yyyy-mm-dd') AS Dato, Format([AllData]![Dato],'hh') AS [Time] " & _
"FROM AllData " & _
"GROUP BY Format([AllData]![Dato],'yyyy-mm-dd'), Format([AllData]![Dato],'hh') " & _
"ORDER BY Format([AllData]![Dato],'yyyy-mm-dd'), Format([AllData]![Dato],'hh') " & _
"PIVOT AllData.IDkode In (52638,52647,51568,51155,53150,51150,51698,49517,8137,49605,53125,49560,53506,52617)"

Jeg ville dog gerne hvis den selv kunne slå op i en række lige over hvor den skal sætte tallene ind, hvilket ID det er den skal hente data for.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester