这是一个很难解释的问题,所以我会尝试使用示例来展示我的内容。请注意,我不问是否可以在BREAK
声明中使用多列 - 我知道它是。除了在SQL * Plus中指定的列之外,是否可以在列上打破?
假设我有类似下面的查询:
SELECT invoice_no, invoice_date, vendor, account, amount
FROM invoice
ORDER BY vendor, invoice_no, account
并假设结果从设置为:
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
所以你可以看到,一些供应商有多个发票,有的发票有多个帐户。
要隐藏重复的供应商名称和发票号码,我可以使用SQL * Plus的BREAK
命令,象这样:
BREAK ON vendor ON invoice_no
将会产生这样的结果集:到目前为止
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
,那么好。我还想隐藏重复的发票日期,以便显示每个发票的第一个日期。不过,如果我使用这个命令:
BREAK ON vendor ON invoice_no ON invoice_date
它会走的太远,隐藏发票0003和0004的日期,只是因为他们是一样的,从他们各自的供应商之前的发票:
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
我真正喜欢的是这样(我做了术语AND
)命令语法:
BREAK ON vendor ON invoice_no AND invoice_date
的意图是,每当它打破上invoice_no,T Ø也打破invoice_date(因为我知道,一个单一发票号码不能有两个发票日期):
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
而现在的日期显示正确发票0003和0004
有什么在SQL * Plus中实现这一点的方法?
你可以看看这个[链接](http://www.sqlservercentral.com/Forums/Topic799618-338-1.aspx#bm801297) – Smart003 2015-10-20 10:21:36