2016-09-03 3 views
0

Ich versuche, die von X nach Y gehen folgende:Count-Abfrage in SQL Server

tblStationary ---> X

Name Stationary 
------------------- 
Peter Crayon 
Peter Pencil 
Peter Crayon 
Peter Crayon 
Peter Crayon 
Peter Pencil 
John Crayon 
John Crayon 

auf diese Frage: ----> Y

Stationary Amount 
----------------- 
Crayon  2 
Pencil  1 

Buntstift und Bleistift müssen nur einmal pro Person gezählt werden. dh: Wenn Peter 2 Bleistifte hat es muss als 1. gezählt werden so weiter

Ich habe versucht, die folgende und es hilft nicht:

SELECT 
    Stationary, COUNT(Name) AS Number 
FROM 
    (SELECT * FROM dbo.tblStationary) AS t 
GROUP BY 
    Stationary 

Antwort

0

Ich weiß nicht, ob Ihr RDBMS SELECT DISTINCT unterstützt, aber wenn es tut, kann man es so verwenden:

SELECT Stationary, COUNT(Name) AS Number 
FROM (select DISTINCT * FROM dbo.tblStationary) as t 
GROUP BY Stationary 

Also habe ich nur ein DISTINCT in der inneren Abfrage hinzugefügt.

+0

Danke, sieht aus wie es funktioniert. –

+0

Diese Abfrage gibt die Zahl 1 zurück, für die nur eine Schreibmarke vorhanden ist, während Sie in Ihrer Frage eindeutig angegeben haben, dass "Peter 2 Bleistifte hat, muss 1 gezählt werden" und ich bin mir sicher, dass diese Bedingung nicht erfüllt wird – Susang

+1

'SELECT DISTINCT 'gibt jede Kombination von (Person, stationär) nur einmal aus. So wird es einmal gezählt. – redneb

1

Wenn ja, dann können wir einfach getan, um es wie folgt

SELECT Stationary, COUNT(DISTINCT NAME) AS Number 
FROM tblStationary 
GROUP BY Stationary 
+1

Dies ist die bessere Antwort. –