これは説明するのが難しいので、例を使用して説明します。BREAK
ステートメントで複数の列を使用できるかどうかを尋ねているのではないことに注意してください。使用できることはわかっています。
次のようなクエリがあるとします。
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 で中断するたびに、invoice_date でも中断することです (1 つの請求書番号に 2 つの請求日を含めることはできないことがわかっているため)。
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 でこれを達成する方法はありますか?