-1
votes

Créer une requête pour un rapport uniquement pour amener des clients uniquement s'ils ont des comptes ouverts

J'ai une requête que j'essaie d'utiliser pour donner à mes utilisateurs une liste des clients uniquement qui ont actuellement des comptes ouverts. Le problème que j'ai, c'est qu'il apporte à tous les clients même s'ils n'ont pas de comptes courants. Je me sens comme si je manque quelque chose de simple ici, mais jusqu'à présent n'a pas été en mesure de faire fonctionner cela comme prévu. XXX


6 commentaires

Les échantillons de données et les résultats souhaités aideraient. Il est clair que la logique que vous utilisez ne trouve pas de comptes «actuels» ouverts. Quelle pourrait être la bonne logique?


N'ayant aucune donnée disponible, il serait difficile de répondre à cette question, mais il se peut que vous ayez besoin d'interrupteur puis de 1 autre 0 pour 0 autre 1?


Avoir une clause est faux. De plus, pourquoi ne pas utiliser où compte.calé n'est pas null ?


Vous devriez probablement vérifier la condition de cas pour compte. Devrait-il être nul ou autre chose?


J'ai besoin d'obtenir uniquement le numéro de client. Mais seulement s'ils ont des comptes ouverts. La façon de juger que chaque compte a et «ouvert» et «fermé». Si le compte est toujours ouvert, le champ fermé doit être null. Tout compte sans NULL aurait un 1 ou supérieur et être inclus dans les résultats.


Je teste plus loin pour être sûr, mais je crois que cela fonctionne en modifiant le passage à (où comptez.Closed est null) et en ajoutant des distincts.


3 Réponses :


0
votes

Je suppose que si les clients n'ont aucun compte, les liens entre les tableaux peuvent être supprimés. Si tel est le cas, la solution consiste simplement à utiliser jointure intérieure .

Votre syntaxe est également toutes gâché. Mais la requête que vous voulez peut-être être: xxx


0 commentaires

0
votes

Mon conseil serait de repenser votre requête et de la façon dont vous stockez vos données, ce qui est fondamental, obtenez ce mauvais problème, puis à interroger la base de données devient un cauchemar et vous obtenez des résultats inattendus par exemple. Si c'était moi, je créerais une contrainte par défaut qui définirait de nouveaux comptes pour être 0 (signification ouverte) puis écrivez une requête pour mettre à jour des comptes qui devaient être fermés et définir cela sur 1.

à nouveau sans vraiment savoir comment votre schéma semble fournir une réponse précise. p>

Je voudrais ensuite ré-écrire la requête pour être. p> xxx pré>

si cela n'est pas possible de faire alors je Réécrirait votre requête comme suit: P>

SELECT Client.Client, COUNT(Client.Client) AS NumberOfOpenAccounts
FROM dbo.Client 
LEFT JOIN dbo.ClientLink On Client.Client = ClientLink.Client
LEFT JOIN dbo.ClientLink.ExternalId = AccountLink.ExternalId 
LEFT JOIN dbo.AccountLink.Account = Account.Account
WHERE ISNULL(Account.Closed, 1) = 0 --only return clients with opened accounts
GROUP BY Client.Client


0 commentaires

0
votes

Si tout ce que vous cherchez est le nom du client, vous pouvez utiliser des distincts au lieu de grouper. Quelque chose comme la déclaration ci-dessous pourrait faire l'affaire: xxx

espère que cela aide.


0 commentaires