Jag vill att dessa 3 satser nedan ska ge mig ett resultat med dessa kolumn:
Name, Running,Suspended,Completed
Hur gör jag? Jag antar att det är join ska göra men...det har inte gått bra! Hjälp!!!
Nedan är mina satser som jag vill använda.
select name_,count(start_)as Running
from jbpm_processdefinition d, jbpm_processinstance i
where d.id_=i.processdefinition_ and i.end_ is null and i.issuspended_=false
group by name_;
select name_,count(name_) as Suspended
from jbpm_processdefinition d, jbpm_processinstance i
where d.id_=i.processdefinition_ AND i.issuspended_ = 1
group by name_;
select name_, count(end_) as Completed
from jbpm_processdefinition d, jbpm_processinstance i
where d.id_=i.processdefinition_
group by name_;
SELECT
d.name_,
COUNT(DISTINCT i_r.id) AS Running,
COUNT(DISTINCT i_s.id) AS Suspended,
COUNT(DISTINCT i_c.id) AS Completed
FROM jbpm_processdefinition d
LEFT JOIN jbpm_processinstance i_r
ON d.id_ = i_r.processdefinition_ AND i_r.end_ IS NULL AND i_r.issuspended_ = 0
LEFT JOIN jbpm_processinstance i_s
ON d.id_ = i_s.processdefinition_ AND i_s.issuspended_ = 1
LEFT JOIN jbpm_processinstance i_c
ON d.id_ = i_c.processdefinition_ AND i_r.end_ IS NOT NULL AND i_r.issuspended_ = 0
GROUP BY d.name_
Noteringar:
När man joinar flera tabeller, använder GROUP BY och COUNT på det sätt du vill måste du använda DISTINCT för att räkna rätt. Och då spelar det roll vilken kolumn du räknar på, till skillnad från vanlig COUNT. Skulle du t ex köra COUNT(DISTINCT i_r.start_) och flera processer har precis samma starttid så kommer de räknas som en. (Endast distinkta värden räknas) Därför bör du använda jbpm_processinstance's id-kolumn för beräkningen, som koden ovan visar.
Dessutom lade jag till ett par extra villkor till Completed så att Completed väljer ut exakt det som inte väljs ut av de andra två joinarna. Jag antar att det är så du ville ha det, annars får du plocka bort de extra villkoren.
LarsGMedlem sedan dec. 200012 464 inlägg select name_,
sum(case when i.end_ is null and i.issuspended_ <> 1 then 1 else 0 end) as Running,
sum(case when i.issuspended_ = 1 then 1 else 0 end) as suspended,
sum(1) as Completed
from jbpm_processdefinition d
join jbpm_processinstance i
on d.id_ = i.processdefinition_
group by name_
tack så mycket
Yes... både era satser fungerarade utmärkt för mig. Jag behövde bara byta ut små grejer.
så här blev det perfekt för mig...
SELECT
d.name_,
COUNT(DISTINCT i_r.id_) AS Running,
COUNT(DISTINCT i_s.id_) AS Suspended,
COUNT(DISTINCT i_c.id_) AS Completed
FROM jbpm_processdefinition d
LEFT JOIN jbpm_processinstance i_r
ON d.id_ = i_r.processdefinition_ AND i_r.end_ IS NULL AND i_r.issuspended_ = 0
LEFT JOIN jbpm_processinstance i_s
ON d.id_ = i_s.processdefinition_ AND i_s.issuspended_ = 1
LEFT JOIN jbpm_processinstance i_c
ON d.id_ = i_c.processdefinition_ AND i_c.end_ IS NOT NULL AND i_c.issuspended_ = 0
GROUP BY d.name_;
////////////////////////////////////////////
select name_,
sum(case when i.end_ is null and i.issuspended_ <> 1 then 1 else 0 end) as Running,
sum(case when i.issuspended_ = 1 then 1 else 0 end) as suspended,
sum(case when i.end_ IS NOT NULL AND i.issuspended_ = 0 then 1 else 0 end) as Completed
from jbpm_processdefinition d
join jbpm_processinstance i
on d.id_ = i.processdefinition_
group by name_;
Mycket gladare nu!
SjodahlMedlem sedan maj 20033 218 inlägg Glöm inte att markera den som löst av glädje ; )