J'ai 3 tables que je veux rejoindre ensemble et le regrouper pour obtenir des informations sur l'adhésion client. Mon code travaille pour regrouper la table de base ensemble, mais il se casse à la partie de la jointure et je ne peux pas comprendre pourquoi. select t1.transaction_id, sum(t1.product_cost), t1.order_date, t3.client_type
from sales_detail t1
left join (select DISTINCT transaction_ID, other_id, fruits from connector) t2
ON t1.transaction_ID=t2.transaction_ID
left join (select DISTINCT order_id, client_type, fruits from client information) t3
ON t2.other_id=t3.other_id and t2.item=t3.item
where t1.payment_type='mastercard' and t1.order_Date between '2020-10-01' and'2020-10-31'
and country != 'canada'
GROUP BY t1.transaction_id, t1.order_date, t3.client_type;
4 Réponses :
Je pense que c'est des jointures et de l'agrégation. Pour plus d'efficacité, vous pouvez pré-globaliser dans une sous-requête, puis rejoindre: Notez que j'ai réécrit le filtre sur ordre_date code> pour utiliser des intervalles à moitié ouverts plutôt que
entre code>. Cela gère correctement le cas lorsque vos dates ont une partie de temps. P> p>
Merci cela fonctionne! Question Bien que cela fonctionne parfaitement sur SQL Fiddle, mais pour les données réelles, le temps d'exécution est extrêmement lent. Y a-t-il un bon moyen de recommander que vous pouvez accélérer la requête?
@eeazzzz: Cela ressemble à une question différente, pour laquelle vous auriez besoin de fournir plus d'informations (structure de table, index existants, plan d'exécution, ...). Je ne peux que recommander accepter cette réponse et Demander une nouvelle question pour cela.
De ce que j'ai compris, votre code fonctionne bien que cela ne souhaite pas utiliser un joint interne code> code> et il ne parvient pas à ajouter un une de ces fonctions est le rejoindre code>. Je pense que ce qui se passe est une défaillance due aux éléments code> null code>. Pour ajouter un élément
null code> et ne pas obtenir une erreur, vous devez utiliser une fonction qui modifie la valeur
null code> sur
0 p>. p>.
isnull (YourColumn, 0) code> fonction de T-SQL fort>. La documentation . P>
Je peux voir que dans la table des résultats, vous n'avez besoin que de clients
Je pense que sur la réponse avec GMB, vous devez également rejoindre la colonne de l'article sinon vous obtiendrez plusieurs lignes de sortie.
select sd.*, ci.client_type from ( select order_date, transaction_id, sum(product_cost) product_cost from sales_detail group by order_date, transaction_id ) sd inner join connector c on c.transaction_id = sd.transaction_id inner join client_information ci on ci.other_id = c.other_id and ci.item = c.item
Merci cela fonctionne! Question Bien que cela fonctionne parfaitement sur SQL Fiddle, mais pour les données réelles, le temps d'exécution est extrêmement lent. Y a-t-il un bon moyen de recommander que vous pouvez accélérer la requête?
Comme je n'ai aucune idée de ce que vous ressemblez à votre schéma et combien de données il y a et d'autres détails, je ne peux fournir aucune idée de la façon de faire cela. Veuillez marquer la réponse comme approprié et poser une autre question.
J'ai supprimé les balises de base de données incohérentes. Veuillez baliser uniquement avec la base de données que vous utilisez vraiment.