2010-09-27 10 views
1

J'ai deux tables, arrc_PurchActivity et arrc_Voucher. Le tableau des activités d'achat contient plusieurs enregistrements par achat, liés ensemble par l'autorisation de carte de crédit. Je dois retourner une seule ligne par achat, plus tirer un champ de la table de bons. Si je viens de saisir quelques champs de la table d'activités d'achat, comme celui-ci:en utilisant group_concat avec d'autres critères de sélection - mySQL

SELECT group_concat(VoucherID) , CcAuthCode FROM arrc_PurchaseActivity GROUP BY CcAuthCode 

il fonctionne très bien, le retour quelque chose comme ceci:

group_concat(VoucherID) | CcAuthCode 
========================================= 
610643,611139,610642  | 8LUPDN 

Ce que je dois faire est de tirer dans une autre contatenated field (VoucherNbr), cette fois à partir de la table arrc_Voucher, où VoucherID de la table de bons correspond à VoucherID de la table d'achat. Dans ce cas, parce que VoucherID est une concaténation, j'ai besoin de retourner une colonne concaténée de VoucherNbr pour chaque VoucherID dans la colonne concaténée. Clair comme de la boue, non? Ce que je dois ressemblerait à ceci:

group_concat(VoucherID) | group_concat(VoucherNbr) | CcAuthCode 
===========================|============================|============= 
610643,611139,610642  | 123,456,789    | 8LUPDN 

En d'autres termes, le VoucherNbr pour VoucherID 610643 est 123, VoucherNbr pour 611139 est de 456, etc.

Quelqu'un peut-il me aider? C'est bien au-dessus de ma tête ...

Répondre

2

Utilisation:

SELECT pa.ccauthcode, 
      GROUP_CONCAT(DISTINCT pa.voucherid) AS voucherids, 
      GROUP_CONCAT(v.vouchernbr) AS vouchernbrs 
    FROM ARRC_PURCHASEACTIVITY pa 
LEFT JOIN ARRC_VOUCHER v ON v.voucherid = pa.voucherid 
GROUP BY pa.ccauthcode 

J'ai spécifié le DISTINCT dans le GROUP_CONCAT pour les années voucherid car il est possible que vous auriez plusieurs vouchernbr à un de voucherid. Si ce n'est pas le cas, retirez le DISTINCT. Le LEFT JOIN s'assure que vous obtiendrez ARRC_PURCHASEACTIVITY enregistrements qui n'ont pas les enregistrements de support dans ARRC_VOUCHER. Changer "LEFT JOIN" à "JOIN" si vous ne voulez pas ce comportement.

+0

Merci! Jusqu'à ces dernières semaines, mon besoin de sql a été assez limité, et mon expérience est également assez limitée - à la base de sélectionner des déclarations de type où. – EmmyS

+0

pouvez-vous recommander un bon livre ou un tutoriel de site Web qui m'aiderait à passer les bases? Je suis sûr que vous avez répondu à quelques-unes de mes autres questions le mois dernier. J'ai fait le tutoriel www.w3schools.com, mais c'est assez simple. Je sais qu'il y a beaucoup de sites de référence, mais vous devez savoir ce que vous cherchez pour utiliser une référence. – EmmyS

+0

@EmmyS: De rien. Désolé, je ne suis pas familier avec des tutoriels plus avancés. Le problème est que les réponses dépendent de la base de données, de la conception de la table (y compris les types de données), des données et du résultat attendu. Je suis encore en train de peaufiner [ma liste de fonctionnalités de catégorisation SQL] (http://stackoverflow.com/questions/2119859/questions-every-good-database-sql-developer-should-be-able-to-answer/2120339# 2120339), mais je commencerais par me concentrer sur les problèmes liés aux bases. –