Ich habe eine SQL-Tabelle AddressCount
, die 3 Felder hat: address
, state
und numEntities
. Was ich tun möchte, ist die Summe der Zahlen für jede Adresse + Zustand Kombination basierend auf einem Gleichen. Dies ist etwas schwer zu beschreiben, aber ich denke, die folgende korrelierten Abfrage stellt richtig, was ich versuche zu erreichen:Wie kann ich eine Spalte basierend auf wie?
SELECT Address, State,
(SELECT SUM(NumEntities)
FROM AddressCount innerQry
WHERE innerQry.address LIKE '%' + outerQry.address + '%'
AND innerQry.state = outerQry.state) As NumEntities
FROM AddressCount outerQry
Grundsätzlich mag ich mit einem Tisch, um am Ende, die eine Adresse hat, einen Zustand, und die Summe von numEntities für alle Adressen wie diese Adresse, umgeben von Platzhaltern. Also, wenn die Adresse "25 Courtland Rd" ist und der Staat NJ ist, möchte ich die Summe von numEntities für alle Zeilen erhalten, die einen Status von NJ und eine Adresse wie '% 25 Courtland Rd%' haben. Ich würde es gerne mit einer GROUP BY LIKE machen, aber ich glaube nicht, dass dies mit SQL möglich ist. Das Grundkonzept ist so etwas wie dies zu tun:
SELECT address, state, sum(numEntities)
FROM AddressCount
GROUP BY (LIKE '%' + address + '%')
Die korrelierte Abfrage SQL-Anweisung ich oben genau geschrieben scheint, aber ich möchte die gleiche Sache tun, wenn möglich, durch eine innere des Tisches kommen auf selbst. Vor kurzem las ich, dass es möglich ist, Tabellen auf einem LIKE-Ausdruck zu verbinden, so möchte ich so etwas wie die folgenden erreichen:
SELECT t1.Address, t1.State, SUM(t2.NumEntities)
FROM AddressCount t1
INNER JOIN AddressCount t2
ON t1.state = t2.state
AND t2.address LIKE '%' + t1.address + '%'
Dies nicht zu funktionieren scheint, aber ... eine Idee, wie ich dies erreichen kann ?
Ich möchte nicht nach der genauen Adresse gruppieren, ich möchte nach etwas gruppieren, wie diese Adresse ... – froadie
Ich denke, das passiert hier, zumindest was ich mir vorgestellt habe (und auch @Jacek, anscheinend:)). Könnten Sie Beispiele für Adressen nennen, die Sie in derselben Gruppe sehen würden? –
Ich bin mir ziemlich sicher, dass das hier passiert: Wenn Sie diese drei Reihen haben, alle im Staat NJ und mit den Nummern 1, 2 und 4, erhalten Sie eine Ergebnisreihe: '25 Courtland Road - NJ - 7'. Ich denke, wenn Sie eine linke Verbindung statt der inneren verwenden, erhalten Sie auch: '25 Courtland Road Apt. 34 - NJ - 0' und 'West 25 Courtland Road - NJ - 0'. –