J'ai été invité à créer un rapport qui affiche les données de transaction pour les membres individuels et montre à quelle fréquence ils ont effectué le même type de transaction.Tableau croisé dynamique MySql basé sur le nombre de transactions
Par exemple:
Bob de l'organisation X a acheté 5 bananes à la fois sur 10 différentes occasions/transactions et Bob de cette même organisation a acheté 3 bananes à la fois sur 20 différentes occasions/transactions .
La base de données contient des données de transaction sous cette forme
|TransactionID | Organization | MemberNumber | ItemID| QuantityPurchased
J'ai actuellement une requête qui crée une table temporaire dans le format suivant.
|Organization | MemberNumber | ItemID | QuantityItemsPurchased | QuantityOfTransactions
----------------------------------------------------------------------------------------
|Company X | 2044 | B2 | 5 | 10
|Company X | 2044 | B2 | 3 | 20
|Company Y | 2035 | A3 | 5 | 5
On m'a demandé de créer un rapport dans le format suivant (le format du rapport est pas pour moi de débat), où chaque colonne de nombre est des transactions avec cette quantité d'articles vendus et la valeur chaque ligne correspond au nombre de transactions ayant vendu cette quantité d'éléments.
|Organization | MemberNumber | ItemID |1 |2 |3 |4 |5 |6+ |
-----------------------------------------------------------------
|Company X | 2044 | B2 |0 |0 |20 |0 |10 |0 |
|Company Y | 2035 | A3 |0 |0 |0 |0 |5 |0 |
Je ne sais pas comment écrire une requête qui peut trier quantityOfItemsPurchased en colonnes individuelles et afficher les QuantityOfTransactions valeur.
J'ai essayé d'écrire une requête similaire à ci-dessous, mais cela ne fonctionne pas pour moi car il donne une valeur de 1 ou 0 sous toutes les colonnes numériques au lieu de la valeur QuantityOfTransactions.
Select Organization, MemberNumber, ItemId,
count(Case when tempTable.quantityOfItemsPurchased = 1 then tempTable.QuantityOfTransactions end) as '1',
count(Case when tempTable.quantityOfItemsPurchased = 2 then tempTable.QuantityOfTransactions end) as '2',
count(Case when tempTable.quantityOfItemsPurchased = 3 then tempTable.QuantityOfTransactions end) as '3',
count(Case when tempTable.quantityOfItemsPurchased = 4 then tempTable.QuantityOfTransactions end) as '4',
count(Case when tempTable.quantityOfItemsPurchased = 5 then tempTable.QuantityOfTransactions end) as '5',
count(Case when tempTable.quantityOfItemsPurchased >= 6 then tempTable.QuantityOfTransactions end) as '6+'
from TempTable group by Organization, MemberNumber, ItemId
Ce genre de chose est si facile dans le code d'application. :-( – Strawberry
Strawberry, d'accord que ce serait plus facile, mais nous essayons de garder ces types de rapports distincts de l'application que les ventes/gestion demande toujours des modifications aux rapports et il n'est pas pratique d'avoir à publier constamment une nouvelle construction Malheureusement, ma connaissance de DB est limitée, mais c'est ce qu'elle est – Jcross