[SQL \ Access] Hulp met Query ??

Pagina: 1
Acties:

  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 25-08 10:10
Ik ben bezig met het maken van een specifieke rapportage, maar daarbij loop ik tegen een probleem aan.

Ik heb 2 tabellen: categories en productivity

categories:
-caid
-caname

productivity:
-prid
-caid
-prquantity
-prdate

Ik wil graag een rapport maken in access die er als volgt uit gaat zien:

Jaar Week cat1 cat2 cat3 cat4 cat5 cat6 cat7 ..... cat x

2002 1 x x x x x ....
2002 2 x x x x x ....

Nu heb ik de volgende query gemaakt:

SELECT DatePart("yyyy",[prDate],2) AS Jaar, DatePart("ww",[prDate],2) AS Week, [caName] AS Category, sum([prQuantity]) AS Aantal
FROM categories, productivity
WHERE categories.caid = productivity.caid
GROUP BY DatePart("yyyy",[prDate],2), DatePart("ww",[prDate],2), caName;

Daarmee krijg ik bijna terug wat ik wil. Er is alleen 1 probleem, niet in elke week is er voor elke category een quantity. Daardoor krijg ik niet voor elke week hetzelfde aantal categories terug, maar bijvoorbeeld 6 voor week 1, 7 voor week 2 etc.

Mijn grote vraag is dus hoe ik er voor kan zorgen dat de query voor elke week dat er geen quantity is een 0 geeft voor die caname, ookal staat er dan dus niets in de database.

  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 25-08 10:10
Laat maar....ik heb het al gevonden.

Even een crosstab erover heen gooien:

TRANSFORM Avg([Aantal]) AS [The Value]
SELECT [Week], [Jaar]
FROM [Post per category per week]
GROUP BY [Week], [Jaar]
PIVOT [Category];

:)

Verwijderd

de 'FROM categories, productivity' regel geeft aan een INNER JOIN, dus er worden alleen resultregels gemaakt indien in beide tabellen een record bevindt dat zich aan de where houdt. Als je het oplost met een LEFT JOIN dan krijg je hoe dan ook altijd alle records van de left operant.

  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 25-08 10:10
Ik heb nu:

SELECT DatePart("yyyy",[prDate],2) AS Jaar, DatePart("ww",[prDate],2) AS Week, [caName] AS Category, sum([prQuantity]) AS Aantal
FROM categories LEFT JOIN productivity ON categories.caid = productivity.caid
GROUP BY DatePart("yyyy",[prDate],2), DatePart("ww",[prDate],2), caName;

Toch krijg ik nog niet het goede resultaat. Nog steeds krijg ik iets als:
2002 1 Cat1 x
2002 1 Cat2 x
2002 1 Cat4 x
2002 2 Cat1 x
2002 2 Cat3 x
2002 2 Cat5 x

Alle records van categories komen dus wel voor, maar niet elke week en dat is wel de bedoeling. Is hier nog een oplossing voor ??

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Helaas SQL is een query taal en geen reporting taal.
Je kan geen info creëren die er niet is.
Je zult dus tot een agenda tabel moeten komen als je bij elke week elke categorie wilt hebben.