Est-il possible de sortir SUR une colonne en plus de celui spécifié dans SQL*Plus?

Ceci est difficile à expliquer, donc je vais essayer de montrer ce que je suis après à l'aide d'exemples. Veuillez noter que je ne suis pas de demander si il est possible d'utiliser plusieurs colonnes dans une BREAK déclaration, je sais qu'il est.

Supposons que j'ai une requête du genre:

SELECT  invoice_no, invoice_date, vendor, account, amount
FROM    invoice
ORDER   BY vendor, invoice_no, account

Et supposons que le résultat de ce qui est:

INVOICE_NO INVOICE_DATE VENDOR  ACCOUNT AMOUNT
---------- ------------ ------- ------- ------
0001       30-JAN-2009  Alpha   1000     50.00
0003       30-JAN-2009  Alpha   1000    125.00
0003       30-JAN-2009  Alpha   3000     33.33
0006       02-FEB-2009  Alpha   2000     40.00
0005       31-JAN-2009  Bravo   1000     40.00
0002       30-JAN-2009  Charlie 2000    120.75
0002       30-JAN-2009  Charlie 3000      5.00
0004       30-JAN-2009  Charlie 1000    900.50

De sorte que vous pouvez voir que certains éditeurs ont plusieurs factures et des factures des comptes multiples.

Pour masquer le double de fournisseur de noms et de numéros de facture, je peux utiliser SQL*Plus de BREAK de commande comme suit:

BREAK ON vendor ON invoice_no

Qui produit cet ensemble de résultats:

INVOICE_NO INVOICE_DATE VENDOR  ACCOUNT AMOUNT
---------- ------------ ------- ------- ------
0001       30-JAN-2009  Alpha   1000     50.00
0003       30-JAN-2009          1000    125.00
           30-JAN-2009          3000     33.33
0006       02-FEB-2009          2000     40.00
0005       31-JAN-2009  Bravo   1000     40.00
0002       30-JAN-2009  Charlie 2000    120.75
           30-JAN-2009          3000      5.00
0004       30-JAN-2009          1000    900.50

Donc bon. Je tiens également à masquer duplicata de la facture de dates, de façon à ce que la première date de chaque facture est indiqué. Cependant, si j'utilise cette commande:

BREAK ON vendor ON invoice_no ON invoice_date

Il ira trop loin et masquer la date pour les factures 0003 0004 et, juste parce qu'ils sont les mêmes que les précédentes factures de leurs fournisseurs respectifs:

INVOICE_NO INVOICE_DATE VENDOR  ACCOUNT AMOUNT
---------- ------------ ------- ------- ------
0001       30-JAN-2009  Alpha   1000     50.00
0003                            1000    125.00
                                3000     33.33
0006       02-FEB-2009          2000     40.00
0005       31-JAN-2009  Bravo   1000     40.00
0002       30-JAN-2009  Charlie 2000    120.75
                                3000      5.00
0004                    Charlie 1000    900.50

Ce que j'aimerais vraiment est une syntaxe de commande semblable à la suivante (j'ai fait le terme AND):

BREAK ON vendor ON invoice_no AND invoice_date

L'intention est que, chaque fois qu'il se brise sur invoice_no, à casser aussi sur invoice_date (depuis que je sais que d'un seul numéro de la facture ne peut pas avoir deux dates de facturation):

INVOICE_NO INVOICE_DATE VENDOR  ACCOUNT AMOUNT
---------- ------------ ------- ------- ------
0001       30-JAN-2009  Alpha   1000     50.00
0003       30-JAN-2009          1000    125.00
                                3000     33.33
0006       02-FEB-2009          2000     40.00
0005       31-JAN-2009  Bravo   1000     40.00
0002       30-JAN-2009  Charlie 2000    120.75
                                3000      5.00
0004       30-JAN-2009  Charlie 1000    900.50

Et maintenant les dates sont affichées correctement pour les factures 0003 0004 et.

Est-il possible de le faire dans SQL*Plus?

pouvez-vous regarder dans ce lien

OriginalL'auteur yukondude | 2009-06-11