J'ai une table appelée TempAllAddresses
avec les colonnes suivantes - ID
, Address
, State
. Je veux remplir une nouvelle table avec Address
, State
et Count
. Count
doit représenter le nombre d'enregistrements présents dans la table TempAllAddresses qui ont une adresse comme cette adresse suivie d'un caractère générique. Si ce fait n'a pas de sens, voici un exemple pour illustrer - Disons que j'ai un dossier comme celui-ci:Quel est le problème avec cette jointure d'une table à elle-même?
ID Address State
12345 13 Phoenix NY
Ce que je veux faire est d'insérer un nouvel enregistrement dans une nouvelle table appelée AddressCount
qui a 13 Phoenix le Address
, NY pour le State
, et le nombre d'enregistrements dans la table qui ont NY comme état et une adresse COMME '13 Phoenix% 'pour le Count
.
Je veux accomplir cela avec une jointure interne de TempAllAddresses sur lui-même. Voilà ce que je l'ai essayé, mais il ne semble pas accomplir ce que je cherche:
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
Le comte est définitivement hors, bien que. Cela devrait être équivalent à "SELECT COUNT(*) FROM TempAllAddresses WHERE State=thisRecordsState and Address LIKE thisRecordsAddress + '%'
". Comment puis-je accomplir cela? Qu'est-ce que je fais mal?
Edit:
Le comte semble être hors de la manière suivante - Si j'ai un disque comme je l'ai mentionné plus haut, puis-je avoir 2 autres enregistrements qui ont aussi un état de New York, et , il me semble
13 Phoenix NY 3
au lieu de cela à obtenir:: alors avoir des adresses de « 13 Phoenix route » et « 13 Phoenix Rd », alors je veux entrer dans ma table finale un dossier comme celui-ci
13 Phoenix NY 9
Je ne sais pas très bien ce qui se passe ici ... une sorte de produit cartésien? Permutations ...? Quelqu'un peut-il expliquer cela?
Edit 2: Une autre édition que je semble être mal compris (et vraiment besoin d'une solution :() ... Voici une requête avec une sous-sélection corrélative qui accomplit ce que je cherche je. souhaitez faire la même chose avec une jointure de la table sur elle-même plutôt que d'une sous-sélection.
SELECT Address, State,
(SELECT Count(*)
FROM TempAllAddresses innerQry
WHERE innerQry.address LIKE outerQry.address + '%'
AND innerQry.state = outerQry.state) As NumEntities
FROM TempAllAddresses outerQry
en fait, pour chaque enregistrement, je veux obtenir le nombre d'enregistrements dans la table qui ont le même état et une adresse qui commence par cette adresse (ou est égale à ... Je veux inclure cette adresse dans le compte)
Comment le compte est-il désactivé? Est-ce que chaque ligne devrait se compter (tout compte> = 1)? –
il semble réellement correct. si vous ne résumez pas (c'est-à-dire groupe), quel est le résultat attendu (pour t2.address)? – lijie
désolé, je suis un peu flou à ce sujet, donc je ne suis pas sûr si je comprends complètement vos commentaires ... Je vais essayer de mettre à jour la question pour expliquer comment le compte est désactivé – froadie