webForumDet fria alternativet

SELECT COUNT(*) as x,

Databaser & SQL

8 svar · 394 visningar · startad av theguru

Medlem sedan juli 2000411 inlägg
Frågan#1

Hur gör man i en "SELECT COUNT(*) as x" när man vill få visa "0" om den inte hittar några annars ska den visa hur många träffar som man får.

Antar man måste göra nån sorts if sats men det står still just. Nån som några förslag eller exempel?

Medlem sedan juni 200032 967 inlägg
#2

SELECT COUNT(*) borde ge dig 0 om det inte finns några poster som motsvarar dina kriterier. Gör den inte det?

Medlem sedan juli 2000411 inlägg
#3

grejen är den att jag använder det som kolumner som jag sedan matchar mot varandra.

SELECT A.Reviewer_Id,A.User_Name,A.Password,A.Name,A.Reviewer_EMail,
ab.NumberAbstracts,s.NumberScored,s.client_id,s.project_id,ab.client_id,ab.project_id 
FROM Reviewers A ,

(SELECT COUNT(Abstract_Id) as NumberAbstracts, apr.client_id,apr.project_id,apr.reviewer_id 
from AbstractsPerReviewer apr, Reviewers A2 where (apr.client_id = a2.client_id) and 
(apr.project_id = a2.project_id) and (apr.reviewer_id = a2.user_name or apr.reviewer_id = a2.reviewer_id

or not exists(SELECT  *
from Reviewers A2 where 
(apr.reviewer_id = a2.user_name or apr.reviewer_id = a2.reviewer_id)))

GROUP BY apr.client_id, apr.project_id, apr.reviewer_id ) ab, 

(SELECT COUNT(Abstract_Id) as NumberScored, sc.client_id, Sc.project_id,Sc.reviewer_id 
FROM Scores sc, Reviewers A3 where Sc.client_id = a3.client_id and Sc.project_id = a3.project_id and 
(Sc.reviewer_id = a3.user_name or Sc.reviewer_id = a3.reviewer_id

or not exists(SELECT  *
from Reviewers where 
(Sc.reviewer_id = Reviewers.user_name or Sc.reviewer_id = Reviewers.reviewer_id)))

GROUP BY sc.client_id, Sc.project_id, Sc.reviewer_id) s 

where A.Client_Id = 'SHOCKLOGIC' AND A.Project_Id = 'DEMO0001' and s.Client_Id = a.Client_Id AND 
s.project_Id = a.project_id and ab.Client_Id = a.Client_Id AND ab.project_Id = a.project_id and 
ab.reviewer_Id = a.user_name AND ab.reviewer_id = s.reviewer_id AND 
ab.NumberAbstracts > s.NumberScored 

GROUP BY A.Reviewer_Id,A.User_Name,A.Password,A.Name,A.Reviewer_EMail,ab.NumberAbstracts,s.NumberScored,
s.client_id,s.project_id,ab.client_id,ab.project_id ORDER BY A.Reviewer_Id DESC
Medlem sedan dec. 200012 464 inlägg
#4

Använd outer join.

Medlem sedan juli 2000411 inlägg
#5

Hur menar du då? nåt exempel?

Medlem sedan dec. 200012 464 inlägg
#6

Du skriver

from t , (select ... ) s where t.c = s.c

istället

from t left join (select ... ) s on t.c = s.c

då får du ett resultat även om det inte finns matchande rader i s

Medlem sedan juli 2000411 inlägg
#7

det verkar inte riktigt gå att skriva så med den queryn jag har. Jag får syntax fel. Har du nåt fulllbordat exemel eller kan du eller ser du vart jag ska ändra?

Medlem sedan dec. 200012 464 inlägg
#8

Det jag menar är

SELECT A.Reviewer_Id,A.User_Name,A.Password,A.Name,A.Reviewer_EMail  ,
ab.NumberAbstracts,s.NumberScored,s.client_id,s.project_id,a  b.client_id,ab.project_id 
FROM Reviewers A left join
(SELECT COUNT(Abstract_Id) as NumberAbstracts, apr.client_id,apr.project_id,apr.reviewer_id 
from AbstractsPerReviewer apr, Reviewers A2 where (apr.client_id = a2.client_id) and 
(apr.project_id = a2.project_id) and (apr.reviewer_id = a2.user_name or apr.reviewer_id = a2.reviewer_id
or not exists(SELECT  *
from Reviewers A2 where 
(apr.reviewer_id = a2.user_name or apr.reviewer_id = a2.reviewer_id)))
GROUP BY apr.client_id, apr.project_id, apr.reviewer_id ) ab 
on ab.project_Id = a.project_id
and ab.Client_Id = a.Client_Id 
and ab.reviewer_Id = a.user_name left join
(SELECT COUNT(Abstract_Id) as NumberScored, sc.client_id, Sc.project_id,Sc.reviewer_id 
FROM Scores sc, Reviewers A3 where Sc.client_id = a3.client_id and Sc.project_id = a3.project_id and 
(Sc.reviewer_id = a3.user_name or Sc.reviewer_id = a3.reviewer_id
or not exists(SELECT  *
from Reviewers where 
(Sc.reviewer_id = Reviewers.user_name or Sc.reviewer_id = Reviewers.reviewer_id)))
GROUP BY sc.client_id, Sc.project_id, Sc.reviewer_id) s 
on s.Client_Id = a.Client_Id
and s.project_Id = a.project_id
and ab.NumberAbstracts > s.NumberScored 
where A.Client_Id = 'SHOCKLOGIC' 
  AND A.Project_Id = 'DEMO0001' 
GROUP BY A.Reviewer_Id,
         A.User_Name,A.Password,
         A.Name,
         A.Reviewer_EMail  ,
         ab.NumberAbstracts,
         s.NumberScored,
         s.client_id,
         s.project_id,
         ab.client_id,
         ab.project_id 
ORDER BY A.Reviewer_Id DESC

Sen så har jag inte sportmössa att avgöra om det är vad du vill ha.

Medlem sedan juli 2000411 inlägg
#9

Tack det löste sig

276 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)