2017-03-14 4 views
0

Also ich stecke auf ein Problem, das ich versuche zu lösen. Ich versuche "Wählen Sie die Beschreibung der häufigsten Lieferart". Ich führe es aus, aber ich bekomme keine Rückkehr. Ich habe sogar versucht, die Zählungen durch die Liefertyp-IDs zu ersetzen, aber selbst dann erhalte ich keine Ausgabe. Was mache ich falsch ?Unterabfrage Ich kann es nicht herausfinden

Select DeliveryTypeDescription 
from DeliveryType 
group by DeliveryTypeDescription 
having count(*) >ALL(
     Select count(*) 
     from DeliveryType 
     group by DeliveryTypeID) 
+0

Sind Sie sicher, dass dies SQL-Server ist? – DVT

+0

Ja im sql server 2014 –

+0

'mit count (*)> = ALL (' – artm

Antwort

4
Select Top 1 DeliveryTypeDescription 
From DeliveryType 
Group By DeliveryTypeDescription 
Order By count(*) Desc 
+0

Danke für die Antwort aber gibt es eine Möglichkeit, dies mit einer Unterabfrage zu tun? –

+1

@KristianAbenojar - Warum möchten Sie eine Unterabfrage verwenden? – GurV

+0

Ja, ich versuche, es mit einer Unterabfrage –

0

In Ihrem Fall wird die Lieferung Typ Primärschlüssel sein, so dass die Zählung wird nie als 1 mehr sein?

IF OBJECT_ID('tempdb..#DeliveryType') IS NOT NULL DROP TABLE #DeliveryType 
CREATE TABLE #DeliveryType (DeliveryTypeID INT,DeliveryType VARCHAR(20),DeliveryTypeDescription VARCHAR(200)) 
INSERT INTO #DeliveryType VALUES(101,'Home','Home Delivery'),(102,'Work','Work Delivery'),(103,'Ref','Deliver to Reference'),(104,'Pick','Pickup'); 

SELECT DeliveryTypeDescription FROM #DeliveryType GROUP BY DeliveryTypeDescription HAVING COUNT(*) > ALL ( SELECT COUNT(*)  FROM #DeliveryType GROUP BY DeliveryTypeID); 

und in diesem Fall

SELECT COUNT(*) 
FROM #DeliveryType 
GROUP BY DeliveryTypeID 

kehren alle 1,1,1,1

0
Select DeliveryTypeDescription 
from DeliveryType 
group by DeliveryTypeDescription 
having **count(*)** **>**ALL(
     **Select count(*)** 
     from DeliveryType 
     group by DeliveryTypeID) 

Sie alle Zeilen abrufen, nicht wahr? Also denke ich, dass du '> =' anstelle von '>' verwenden musst.

+0

Letztendlich brauche ich die eine Zeile der Beschreibungen, die am häufigsten verwendet wird. Wenn ich das '> =' hinzufügen wird es alle Zeilen, aber nicht die Zeile auffüllen das hält den am häufigsten verwendeten deliveryType –

+0

Und wenn Sie versuchen, "count (*) + 1"? Tatsache ist, dass mit nur ">" Operator es nicht funktioniert. –

0

Okay, also habe ich den Weg gefunden, dieses Problem mit einer Unterabfrage zu lösen. Mein Problem in erster Linie war, dass ich nicht über die Beziehung der häufigsten Lieferart, die von einem Kunden verwendet wurde, nachgedacht habe. Die relative Tabelle mit dem Fremdschlüssel befand sich in einer "Kundenpapiertabelle". Daher musste ich nur die höchste Anzahl von DeliverTypeID in der Tabelle "CustomerPaper" finden.

SELECT DeliveryType.DeliveryTypeDescription FROM DeliveryType 
INNER JOIN CustomerPaper 
ON DeliveryType.DeliveryTypeID = CustomerPaper.DeliveryTypeID 
GROUP BY DeliveryType.DeliveryTypeDescription 
HAVING COUNT(CustomerPaper.DeliveryTypeID) >=ALL 
(SELECT COUNT(customerpaper.DeliveryTypeID) FROM CustomerPaper GROUP BY CustomerPaper.DeliveryTypeID)   
Verwandte Themen