Optellen van tickets per organisatie

Status
Niet open voor verdere reacties.

speedyk

Nieuwe gebruiker
Lid geworden
15 sep 2013
Berichten
3
Hallo,

Voor rapportering vanuit een DB van een ITIL gebaseerde applicatie moet ik een rapport bouwen aantal tickets pet type ticket per organisatie.
Vb.:

Ik heb 3 Tabellen:

  1. Tabel organisatie
  • Veld ID
  • Veld Naam
  1. Tabel Requests
  • Veld ID
  • Veld Subject
  • Veld Organisatie_ID
  1. Tabel Problems
  • Veld ID
  • Veld Subject
  • Veld Organisatie_ID

Ik wil als resultaat:

Kolom 1: Organisaties
Kolom 2: Aantal Requests
Kolom 3: Aantal Problems

Iemand enig idee hoe ik dit kan doen?
Ik heb al vanalles geprobeerd.
 
Dit heb ik allemaal al is geprobeerd:
[sql]
SELECT
organisatie.name,
COUNT(reqs.id) AS `"Request"`,
COUNT(problems.id) AS `"Problems"`
FROM problems inner JOIN organisatie ON problems.organisatie_id = organisatie.id
GROUP BY organisatie.name
[/sql]
Maar dan krijg ik maar 1 organisatie te zien met alle request.

Dan heb ik dit geprobeerd:
[sql]
SELECT organisatie.name,
(SELECT COUNT(reqs.id) FROM reqs ) AS requests
,(SELECT COUNT(problems.id) FROM problems ) AS problems
FROM organisatie
GROUP BY organisatie.id
[/sql]
Dan krijg ik wel alle organisatie maar dan heeft elke organisatie dezelfde aantal request en problems.

Dit werkt ook niet. :(
[sql]
SELECT organisatie.name
FROM organisatie
UNION
SELECT COUNT(*) AS problems FROM problems
INNER JOIN organisatie ON problems.organisatie_id = organisatie.id
GROUP BY organisatie.name
[/sql]
Iemand een idee hoe ik dit wel kan doen?

Alvast bedankt.
 
Laatst bewerkt door een moderator:
Een mogelijkheid is:
[sql]
SELECT
o.naam,
(SELECT COUNT(id) FROM requests r WHERE r.organisatie_id = o.id) AS aantal_requests,
(SELECT COUNT(id) FROM problems p WHERE p.organisatie_id = o.id) AS aantal_problems
FROM organisatie o
[/sql]
http://sqlfiddle.com/#!2/e9d78/2
 
Een mogelijkheid is:

Die selecteert de count apart voor elke waarde van o.id, wat in sommige toepassingen heel erg veel werk kan zijn voor de database.
Een variatie die dat niet heeft is:
[sql]
SELECT
o.naam
, aantal_requests.aantal
, aantal_problems
FROM organisatie o
LEFT JOIN
SELECT COUNT(*) AS aantal, organisatie_id FROM requests GROUP BY organistie_id AS aantal_requests ON aantal_requests.organisatie_id = o.id
LEFT JOIN
SELECT COUNT(*) AS aantal, organisatie_id FROM problems GROUP BY organisatie_id AS aantal_problems ON o.id = aantal_problems.organisatie_id
[/sql]
Het belangrijkste put is in ieder geval dat je niet zomaar de problems en de requests aan de organisaties kunt joinen, want dan krijg je alle mogelijke combinaties van de drie en dan heeft één organisatie met twee request en vier problemen toch acht combinaties en zal count(*) dus ook overal acht opleveren.
 
Laatst bewerkt door een moderator:
:thumb:
Bedankt Tha Devil en PgVincent.

Dit is wat ik zocht.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan