2011-11-02 7 views
0

J'ai un rapport de cristal, il a un groupe par déclaration fondée sur deux champsRésumer par groupe et sous-groupe

  1. Raison sociale
  2. Type de compte

maintenant Crystal travail de rapport et il fait un groupe par "companyname" mais il ne se regroupe pas par "type de compte". J'ai deux types de compte, "Régulier et Premium". Une entreprise a deux type de compte avec nous et il tire sur régulier et pas premium. Que pensez-vous est le problème.

Je suis nouveau dans le domaine du cristal. Je suis familier avec SQL Bien. Les différences que je vois est

  • Il n'y a pas de fonction agrégat utilisé pour une colonne - dans SQL un champ global est nécessaire pour obtenir un résultat significatif
  • Il y a environ 10 champs dans le rapport, mais le groupe par est utilisé uniquement sur deux champs - dans SQL vous devez regrouper tous les champs s'il y a plus de deux champs
  • le groupe de champs sont au milieu et en fin - à nouveau dans SQL l'ordre de champ groupby est important

Dans ce cas, je suis le regroupement par nom d'entreprise d'abord, puis le compte s tatus. Toute idée sera utile.

Notez que j'ai généré l'instruction SQL équivalente à partir de Crystal Report. Cette requête était correcte sauf qu'il n'y avait pas de groupe par instructions. J'ai ajouté ceux-ci et la colonne agrégée moi-même et j'obtiens le même résultat que je reçois dans Crystal (mais le rapport SQL est plus précis car il regroupe les deux champs et pas seulement un).

Édition: Exemple Date. Chaque entreprise peut avoir plusieurs comptes du même type. Je veux agréger sur "Nom de l'entreprise" et "AccountType" de sorte que les données sont répertoriées comme suit.

+----+--------------+-------------+------+ 
| ID | Company Name | AccountType | Sale | 
+----+--------------+-------------+------+ 
| 1 | ABC   | I   | 500 | 
| 2 | ABC   | I   | 600 | 
| 3 | ABC   | O   | 1000 | 
| 4 | ABC   | O   | 2000 | 
| 5 | ABC   | O   | 3000 | 
| 6 | XYZ   | O   | 2500 | 
| 7 | LMN   | O   | 3400 | 
+----+--------------+-------------+------+ 

sortie Je veux à partir du tableau ci-dessus est

+--------------+-------------+------+ 
| Company Name | AccountType | Sale | 
+--------------+-------------+------+ 
| ABC   | I   | 1100 | 
| ABC   | O   | 6000 | 
| XYZ   | O   | 2500 | 
| LMN   | O   | 3400 | 
+--------------+-------------+------+ 

Répondre

3

mise à jour pour intégrer la discussion de commentaires et de questions révisée:

Il y a deux options de base pour résoudre ce problème:

1) Réviser le SQL pour effectuer l'agrégation souhaitée.

2) Dans Crystal, ajoutez deux groupes, un pour la société, puis un pour le type de compte. Avant d'ajouter des groupes dans Crystal, vous disposez de plusieurs sections standard, notamment l'en-tête de rapport, l'en-tête de page, les détails, le pied de page de rapport et le pied de page. Si vous n'effectuez pas de regroupement, chaque ligne lue dans la base de données sera affichée dans la section des détails (techniquement, toute la section des détails est répétée pour chaque ligne). Lorsque vous ajoutez le premier groupe (Société), Crystal ajoute un en-tête de groupe # 1 avant la section Détails et un en-tête de groupe # 1 après la section Détails.Si vous exécutez le rapport à ce stade, pour chaque société, Crystal affichera l'en-tête de groupe avant chaque groupe d'enregistrements de détail associé à cette société, puis affichera tous les enregistrements de détail pour cette société et, enfin, s'affichera. le pied de page de groupe pour cette société.

Généralement, l'en-tête de groupe est utilisé pour afficher des informations communes pour ce regroupement qui n'ont pas besoin d'être répétées pour chaque enregistrement de détail. Dans cet exemple, nous pourrions afficher le nom de l'entreprise et d'autres informations relatives à l'entreprise.

De même, le pied de groupe est généralement utilisé pour afficher des informations récapitulatives pour tous les enregistrements détaillés affichés dans ce groupe.

Dans ce cas, nous pourrions ajouter un agrégat qui résumerait le montant de la vente, qui correspondrait au total des ventes de cette société, quel que soit le type de compte.

Lorsque le second groupe est ajouté, il effectue un sous-regroupement sur le groupe d'origine. Lorsque le second groupe est ajouté, Crystal placera un en-tête de groupe 2 sous l'en-tête de groupe 1 et au-dessus des détails et placera un pied de groupe n ° 2 directement sous les détails et au-dessus du pied de groupe n ° 1.

À ce stade, vous avez un format de rapport semblable au suivant:

Group Header #1 (Company) 
    Group Header #2 (Account Type) 
    Details (the individual sale records) 
    Group Footer #2 
Group Header #1 

Dans ce cas, pour chaque entreprise, nous voulons regrouper les enregistrements des détails par type de compte. Nous pouvons donc ajouter des informations décrivant le type de compte, si nous le souhaitons, à l'en-tête de groupe n ° 2 et nous pouvons ajouter des agrégats au pied de page n ° 2 pour afficher les totaux pour chaque type de compte dans l'entreprise. Maintenant, si tout ce qui est désiré est d'afficher les totaux pour chaque type de compte dans chaque entreprise, alors la seule section que nous devons montrer dans le rapport est le pied de page de groupe # 2. Tous les champs (société, type de compte, agrégat de vente) sont disponibles dans ce pied de page, nous n'avons donc pas besoin de zones supplémentaires.

+0

Oui, une entreprise peut avoir les deux types de compte, mais cela arrive rarement. Si je grouper par 'Account Type', le rapport est alors totalement différent. –

+0

Désolé, je n'ai peut-être pas été clair sur ce point: laissez le groupe Société tel quel, mais supprimez le groupement AccountType. Si une entreprise a plusieurs types de compte et que vous souhaitez qu'ils apparaissent dans un ordre cohérent dans le rapport, vous pouvez les classer par type de compte dans l'entreprise, mais cela peut ne pas être nécessaire. –

+0

J'ai éditer la question. Je n'ai pas pu formater la table ASCII correctement. Si vous cliquez sur le bouton d'édition, vous atteindrez la table correctement. J'ai fourni l'original (maquette) et la sortie requise. Remarque: Je peux le faire en SQL mais je ne suis pas familier avec la façon dont les choses fonctionnent dans Crystla. Je vous remercie. –