Ich habe 2 Datensätze, Hydranten (3381 Datensätze) und Street Centerlines (6636 Datensätze). Ich möchte die Straße identifizieren, die jedem Hydranten-Datensatz am nächsten ist.Nächsten Nachbar in SQL Server berechnen
Nach einigen SQL Server-Ressourcen und Tutorials habe ich ein Skript zusammengestellt, aber es läuft seit über einer Stunde. Ich verstehe, dass der nächste Nachbar eine Weile braucht, um zu rennen, aber es scheint, als ob etwas in der Logik falsch wäre.
select
h.OBJECTID,
st.FULL_ST_NAME
from WATER_HYDRANTS as h LEFT OUTER JOIN
STREET_CENTERLINES as st
on st.Shape.STDistance(h.SHAPE) is NOT NULL
ORDER BY st.Shape.STDistance(h.SHAPE) ASC
Der Grund, warum ich glaube, etwas in der Logik falsch ist, weil, wenn ich eine WHERE-Klausel hinzufügen, nur einen Datensatz mit einer ID zu wählen, die Abfrage eine Liste des gesamten Datensatz zurückgibt. In der ObjectID-Spalte ist es derselbe Wert (z. B. 13992) und in der FULL_ST_NAME-Spalte wird (ich nehme an) eine Liste von jeder Straße in Reihenfolge nach Nähe zu dem Feature angeordnet.
select
h.OBJECTID,
st.FULL_ST_NAME
from WATER_HYDRANTS as h LEFT OUTER JOIN
STREET_CENTERLINES as st
on st.Shape.STDistance(h.SHAPE) is NOT NULL
where h.OBJECTID = '13992'
ORDER BY st.Shape.STDistance(h.SHAPE) ASC
Idealerweise jeder Datensatz in der objectID Spalte eindeutig sein und die FULL_ST_NAME Spalte wird die Straße, die am nächsten zu jedem Hydranten ist.
Bitte lassen Sie mich wissen, wenn ich andere Informationen zur Verfügung stellen kann. Ich habe versucht, in meiner Erklärung gründlich zu sein, und habe einen Due-Diligence-Versuch unternommen, bevor ich zu SO kam.
Dank
Was ist 'st.Shape.STDistance (h.SHAPE)'? Es sieht wie eine Tabellenspalte aus, aber dann wird ein Parameter an ihn übergeben, so dass er wie eine Funktion aussieht. Ist "st" auch der Name eines Schemas sowie der Alias für die Tabelle oder so? In jedem Fall würden Sie erwarten, in diesem Fall ein vollständiges kartesisches Produkt zu erhalten, solange nichts null zurückgibt, da jede Zeile in beiden Tabellen Ihre Verknüpfungskriterien erfüllt. – mallan1121
st.Shape.STDistance (h.SHAPE) ... st ist der Verweis auf den Street Centerline-Datensatz. h ist der Verweis auf den Hydrant-Datensatz. Also mein Verständnis ist die st.Shape ist die tatsächliche Geometrie der Straße Mittellinie, dann wird die Funktion STDistance auf der Geometrie des Hydranten berechnet. – csterling