2014-11-20 11 views
5

Ho la seguente struttura della tabella anche io ho citare la mia uscita previsto please help me con query come io non so molto di query SQLdisplay Regesto Risultato in SQL Server

Tabella 1: Categoria

Name  CatId 
A   1 
B   2 
C   3 

Tabella 2: Emp Dettagli

FName  Id Dob   CatId 
Pratik  1 1958-04-06  2 
Praveen  3 1972-05-12  1 
Nilesh  2 1990-12-12  2 

Finora ho cercato di ottenere tutti risultato con:

SELECT A.Code,A.EmpName,A.DOB,B.cname 
FROM EMPMASTER A 
JOIN CATMASTER B ON A.cCode = B.ccode AND A.Compcode = B.CompCode 
WHERE A.compcode = 'C0001' AND month(A.DOB) >= 1 
     AND MONTH(A.DOB) <= 12 AND A.termflag='L' 
ORDER BY A.DOB 

Ma il mio problema è, voglio anche i risultati di sintesi da visualizzare

Previsto in uscita Sommario:

Grouping   No Of Employees 
A      1 
B      2 
C      0 
+0

In futuro, se si chiede una domanda di SQL con il codice di SQL, aggiungere i tag SQL prima (piuttosto che C#). In questo modo l'evidenziazione della sintassi sarà specifica per SQL piuttosto che per C#. – Tanner

risposta

8

Penso che si possa utilizzare LEFT JOIN, GROUP BY e COUNT come segue:

SELECT [Grouping] = c.Name, 
     [No Of Employees] = COUNT(e.ID) 
FROM Category AS c 
     LEFT JOIN EmpDetails AS e 
      ON e.CatId = c.CatId 
GROUP BY c.Name; 
+0

grazie ha funzionato !!!!! – Nilesh

+0

Gentilmente non usare '=' per Alias ​​ – Rajesh

+1

@Rajesh Perché no? Secondo me è il modo più chiaro di usare gli alias di colonne. [Questo articolo] (http://sqlblog.com/blogs/aaron_bertrand/archive/2012/01/23/bad-habits-to-kick-using-as-instead-of-for-column-aliases.aspx) pretty molto riassume le mie opinioni sulla questione, e francamente, c'è ben poco che Aaron Bertrand abbia scritto che non sono d'accordo con ... – GarethD

1

Prova questo:

SELECT A.NAME, 
(SELECT COUNT(*) FROM #EMP B WHERE A.CATID = B.CATID) AS COUNT 
FROM #TEMP A