這是一個很難解釋的問題,所以我會嘗試使用示例來展示我的內容。請注意,我不問是否可以在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