2017-01-30 10 views
1

Ich versuche, einige der geografischen Features von SQL Server zu verwenden, um herauszufinden, was die 10 nächstgelegenen Niederlassungen eines Kunden sind. Das bekommt mir, was ich für einen Kunden wollen:Wählen Sie alle Datensätze mit Variablen aus

DECLARE @me GEOGRAPHY 
DECLARE @HH NVARCHAR(50) 

SELECT @Me = CustProspLoc, @HH = HHKEY FROM Customers 

SELECT DISTINCT TOP(10) @HH AS CustOmer, BranchNum, CONVERT(DECIMAL(10,1), (BranchLoc.STDistance(@me))/1609.344) AS Miles, BranchLoc.STDistance(@me) 
FROM 
BranchLocations 
WHERE CONVERT(DECIMAL(10,1), (BranchLoc.STDistance(@me))/1609.344) < 25 -- less than this many miles 
ORDER BY Miles 

Und das Ergebnis ist wie folgt aus:

Customer   BranchNum Miles 
------------------ --------- --------------------------- 
20192    14   1.8 
20192    145   4.4 
20192    193   5.3 
20192    7   6.0 
20192    17   7.4 
20192    8   7.6 
20192    3   8.7 
20192    2   9.3 
20192    9   9.8 
20192    1   10.0 

Aber alles, was ich bekommen ist Ergebnisse für diesen einen Kunden ... wie kann ich es für alle Kunden in der Tabelle Kunden?

+0

mit Können Sie bitte Ihre Tabellenstrukturen teilen? – Siyual

+0

Zwei Dinge: 1) Sie haben Ihre Ergebnisse auf TOP 10 beschränkt. Entfernen Sie das und sehen Sie, wie die Ergebnisse aussehen. Wahrscheinlich wird es aus Gründen # 2 nicht wichtig sein. 2) Sie können keiner Variablen mehrere Werte zuweisen. – dfundako

+0

Sie müssen verstehen, wir verwenden SQL und nicht einige unstrukturierte Sprache, wo Sie Heaps/Listen/Arrays haben können. Ich werde versuchen, Ihre Daten in eine temporäre Tabelle oder CTE einzufügen und Ihren Kunden davon abzufiltern. –

Antwort

1

Diese Abfrage

Select * from(
SELECT row_number() over(partition by hhkey order by miles) as rownum, HHKEY as CustOmer, BranchNum, CONVERT(DECIMAL(10,1), (BranchLoc.STDistance(CustProspLoc))/1609.344) AS Miles, BranchLoc.STDistance(CustProspLoc) 
FROM 
BranchLocations,Customers 
WHERE CONVERT(DECIMAL(10,1), (BranchLoc.STDistance(CustProspLoc))/1609.344) < 25 -- less than this many miles 
ORDER BY Miles) as t1 where t1.rownum <= 10 
+1

Fehlermeldung: falsche Syntax in der Nähe des Schlüsselwortes "über" –

+0

Ich habe das '()' der Zeilennummer-Funktion vergessen. Bearbeitete meine Antwort – Hadi

+0

@BrianBattles geben Sie bitte ein Feedback, wenn es immer noch nicht funktioniert. – Hadi

Verwandte Themen