Ich habe eine Tabelle mit der Bezeichnung TempAllAddresses
mit den folgenden Spalten - ID
, Address
, State
. Ich möchte eine neue Tabelle mit Address
, State
und Count
füllen. Count
sollte darstellen, wie viele Datensätze in der Tabelle TempAllAddresses vorhanden sind, die eine Adresse wie diese Adresse gefolgt von einem Platzhalter haben. Wenn das keinen Sinn, hier ein Beispiel zu veranschaulichen - Lasst uns sagen, dass ich einen Rekord wie dieses:Was ist falsch mit dieser Verbindung einer Tabelle zu sich selbst?
ID Address State
12345 13 Phoenix NY
Was soll ich tun, um einen neuen Datensatz in eine neue Tabelle einfügen genannt AddressCount
, die 13 Phoenix hat für die Address
, NY für die State
, und die Anzahl der Datensätze in der Tabelle, die NY als den Staat und eine Adresse LIKE '13 Phoenix% 'für die Count
haben.
Ich möchte dies mit einer inneren Verbindung von TempAllAddresses auf sich selbst erreichen. Dies ist, was ich habe versucht, aber es scheint nicht zu erreichen, was ich suche:
SELECT t1.Address, t1.State, COUNT(t2.address) As NumEntities
FROM TempAllAddresses t1
INNER JOIN TempAllAddresses t2
ON t1.state = t2.state
AND T2.Address LIKE t1.address + '%'
GROUP BY t1.State, t1.Address
Der Graf ist auf jeden Fall ab, aber. Es sollte der Ausführung "SELECT COUNT(*) FROM TempAllAddresses WHERE State=thisRecordsState and Address LIKE thisRecordsAddress + '%'
" entsprechen. Wie kann ich das erreichen? Was mache ich falsch?
Edit:
Die Zahl scheint in der folgenden Art und Weise zu sein, aus - Wenn ich eine Platte haben, wie ich oben erwähnt, und dann habe ich 2 weitere Datensätze, die auch einen Zustand von NY haben, und dann Adressen von "13 Phoenix Straße" haben und "13 Phoenix Rd", dann möchte ich, wie dies in meinem final Table einen Datensatz erhalten:
13 Phoenix NY 3
Stattdessen scheine ich zu bekommen:
13 Phoenix NY 9
Ich bin mir nicht ganz sicher, was hier passiert ... eine Art kartesianisches Produkt? Permutationen ...? Kann das jemand erklären?
Edit 2: Ein weiteres bearbeiten, da ich offenbar falsch verstanden werden (und wirklich brauchen eine Lösung :() ... Hier ist eine Abfrage mit einer korrelierten subselect das erreicht, was ich suche ich. d mögen verbinden die gleiche Sache mit einem inneren tun an sich der Tisch eher als ein subselect.
SELECT Address, State,
(SELECT Count(*)
FROM TempAllAddresses innerQry
WHERE innerQry.address LIKE outerQry.address + '%'
AND innerQry.state = outerQry.state) As NumEntities
FROM TempAllAddresses outerQry
Grundsätzlich für jeden Datensatz, ich möchte die Anzahl der Datensätze in der Tabelle erhalten, die den gleichen Zustand haben und eine Adresse, die mit dieser Adresse beginnt (oder gleich ist ... Ich möchte diese Adresse als Teil der Zählung angeben).
Wie ist der Countdown? Sollte sich jede Zeile selbst zählen (alle zählen> = 1)? –
sieht es tatsächlich korrekt aus. Wenn Sie nicht zusammenfassen (d. h. Gruppe) ist das Ergebnis, was Sie erwarten (für t2.Adresse)? – lijie
Entschuldigung, ich bin ein wenig unscharf, also bin ich mir nicht sicher, ob ich Ihre Kommentare vollständig verstanden habe ... Ich werde versuchen, die Frage zu aktualisieren, um zu erklären, wie die Zählung aus – froadie