300 likes | 457 Views
ACTG 5P53. SQL Reports (from A Guide to SQL 6 th . Edition, Pratt, P.J., Thomson Course Technology, ISBN 0-619-15957-X). Table of Contents Section Overview Section Objectives Use concatenation in a query Create a view for a report Create a query for a report
E N D
ACTG 5P53 SQL Reports (from A Guide to SQL 6th. Edition, Pratt, P.J., Thomson Course Technology, ISBN 0-619-15957-X)
Table of Contents • Section Overview • Section Objectives • Use concatenation in a query • Create a view for a report • Create a query for a report • Change column headings and formats in a report • Add a title to a report • Group data in a report • Include totals and subtotals in a report • Send a report to a file that can be printed • Key Terms
Section Overview • In addition to the sorting and aggregate functions that can be used in a SELECT command, many SQL implementations include commands that can be used to format a report. In this chapter, students will use Oracle commands to format reports. • Objectives • Upon completing this section, students will be able to: • Use concatenation in a query • Create a view for a report • Create a query for a report • Change column headings and formats in a report • Add a title to a report • Group data in a report • Include totals and subtotals in a report • Send a report to a file that can be printed
Concatenating Columns Concatenation is the process of combining two or more character columns into a single expression. To concatenate columns, type two vertical lines (||) between the column names, as illustrated in the example given below: List the number and name of each sales rep. The name should be a concatenation of the FIRST_NAME and LAST_NAME columns. The command to do this is: SELECT REP_NUM, FIRST_NAME||LAST_NAME FROM REP;
FIGURE 1 – Concatenating two columns New column is the Concatenation of FIRST_NAME And LAST_NAME Concatenated column Concatenation symbol
When the first name does not include sufficient characters to fill the width of the column, SQL inserts extra spaces. To remove these extra spaces, the RTRIM (right trim) function can be used. When this function is applied to the value in a column, SQL displays the original value and removes any spaces inserted at the end of the value. FIGURE 2 – Concatenating two columns using the RTRIM function Spaces removed
Creating and Using Scripts When creating views and also when entering report formatting commands, it is a good idea to save the commands in script files for future use. Otherwise, the commands must be reentered every time you want to produce the same report. In SQL*Plus, an editor such as Notepad can be used to create script files by typing the EDIT command and the name of the file to be created. Oracle assigns the file the extension .sql automatically. Then, you can type the command(s), save the file, and close the editor. To run the command(s) in the file from SQL*Plus, type @ (the “at” symbol) followed by the name of the file. In SQL*Plus Worksheet, a script file can be created by typing the command(s) in the upper pane of the SQL*Plus Worksheet window, selecting the Save Input As command on the File menu, and specifying the name and location for the file. Oracle assigns the file the extension .sql automatically. To run the command(s) in the file, select the Open command on the File menu, select the file, click the Open button, and then click the Execute button. Saving the commands in a script has another advantage—doing so allows the report to be developed in stages.
Running the Query for the Report The data for a report can come from either a table or a view. Using a view is preferable to using a table, particularly if the report involves data from more than one table. The report that the students will create in this chapter displays data from the REP and CUSTOMER tables. The report also concatenates two column names, as illustrated in the previous example. The following example creates the view for the report. Create script file named SLSR_REPORT.sql that defines a view named SLSR_REPORT with five columns that you’ll use for the report. Name the first column SLSR; it is the concatenation of the sales rep number, first name, and last name for each sales rep. Insert a hyphen between the sales rep number and name, separate the first and last names with a single space, and trim the values. (For example, the resulting value in the SLSR column for the first sales rep should be “20-Valerie Kaiser.”) Name the second column CUST; it is the concatenation of the customer number and the customer name. Insert a hyphen between the customer number and name and trim the name. Name the third column BAL; it contains the balance. Name the fourth column CRED; it contains the credit limit. Name the fifth column AVAIL; it contains the available credit (CREDIT_LIMIT - BALANCE) for each customer. Run the script file to create the view.
The script containing the command to create this view is given below: CREATE VIEW SLSR_REPORT(SLSR, CUST, BAL, CRED, AVAIL) AS SELECT REP.REP_NUM||'-'||RTRIM(FIRST_NAME)||' '||RTRIM(LAST_NAME), CUSTOMER_NUM||'-'||RTRIM(CUSTOMER_NAME), BALANCE, CREDIT_LIMIT, (CREDIT_LIMIT - BALANCE) FROM REP, CUSTOMER WHERE REP.REP_NUM = CUSTOMER.REP_NUM CREATE VIEW SLSR_REPORT(SLSR, CUST, BAL, CRED, AVAIL) AS SELECT REP.REP_NUM| |'-‘ | |RTRIM(FIRST_NAME)| |' '| |RTRIM(LAST_NAME), CUSTOMER_NUM| |'-‘| |RTRIM(CUSTOMER_NAME), BALANCE, CREDIT_LIMIT, (CREDIT_LIMIT - BALANCE) FROM REP, CUSTOMER WHERE REP.REP_NUM = CUSTOMER.REP_NUM; Figure 3 - Command to create the view for the report Concatenation Includes a space Column names in view Expression for SLSR Computation
Figure 4 – Data in the SLSR_REPORT view SLSR is a concatenation of sales rep number, first name, and last name Selects all columns from the view Orders rows by SLSR and CUST Rows extended over multiple lines (your output might differ
Figure 5 – Script with commands to change the column headings Clears any previous column changes CLEAR COLUMNS COLUMN SLSR HEADING ‘Sales Rep | Number/Name’ COLUMN CUST HEADING ‘Customer | Number/Name’ COLUMN BAL HEADING ‘Current | Balance’ COLUMN CRED HEADING ‘Credit | Limit’ COLUMN AVAIL HEADING ‘Available | Credit’ / Changes the heading of the SLSR column Reruns the previous query Formats “Sales Rep” and “Number/Name” on separate lines
Figure 6 – Revised columns headings Message indicates column Headings were cleared New column headings
Figure 7 – Formatting columns SLSR column will be 20 characters in length FORMAT clause CLEAR COLUMNS COLUMN SLSR HEADING ‘Sales Rep | Number/Name’ FORMAT A20 COLUMN CUST HEADING ‘Customer | Number/Name’ FORMAT A30 COLUMN BAL HEADING ‘Current | Balance’ FORMAT $99,990.99 COLUMN CRED HEADING ‘Credit | Limit’ FORMAT $99,990.99 COLUMN AVAIL HEADING ‘Available | Credit’ FORMAT $99,990.99 / CUST column will be 30 characters in length BAL, CRED, and AVAIL columns will be displayed with dollar signs and two decimal places
Adding a Title to a Report Adding a title to a report is illustrated in the following example: Add a title that extends over two lines to the report. The first line is “Customer Financial Report.” The second line is “Organized by Sales Rep.” To add a title to the top of the report, the TTITLE command is used. (To add a title at the bottom of the report, the BTITLE command is used.) The desired title is included within single quotation marks in the TTITLE command. To display the title on two lines, separate the lines with a vertical line, as shown below: SET LINESIZE 90 SET PAGESIZE 50 TTITLE 'Customer Financial Report|Organized by Sales Rep' / When adding a title to a report, the line size may be adjusted by using the SET LINESIZE command. The line size, which is the maximum number of characters each line can contain, determines where the title appears when it is centered across the line. The page size, which is the maximum number of lines per page, is specified by the SET PAGESIZE command.
Figure 9 – Adding a title to the report CLEAR COLUMNS COLUMN SLSR HEADING ‘Sales Rep | Number/Name’ FORMAT A20 COLUMN CUST HEADING ‘Customer | Number/Name’ FORMAT A30 COLUMN BAL HEADING ‘Current | Balance’ FORMAT $99,990.99 COLUMN CRED HEADING ‘Credit | Limit’ FORMAT $99,990.99 COLUMN AVAIL HEADING ‘Available | Credit’ FORMAT $99,990.99 SET LINESIZE 90 SET PAGESIZE 50 TTITLE ‘Customer Financial Report | Organized by Sales Rep’ / SET LINESIZE command defines The line size SET PAGESIZE command defines the page length TTITLE command defines a title at the top of the page
Figure 10 – Title added at the top of the report Page number Current date Title appears on two lines
Grouping Data in a Report Data can be grouped in reports by using the BREAK command. The BREAK command can be used to identify a column (or collection of columns) on which to group the data. The following example illustrates the use of the BREAK command in grouping data. Group the rows in the report by the SLSR column. In addition, remove the message at the end of the report that indicates the number of rows selected. To group rows by the SLSR column, the command is BREAK ON REPORT ON SLSR, as shown below: BREAK ON REPORT ON SLSR SKIP 1 SET FEEDBACK OFF / The 1 in the SKIP clause at the end of the BREAK command inserts one blank line between groups. The SET FEEDBACK OFF command turns off the message indicating the number of rows selected by the query.
Figure 11 – Adding a break CLEAR COLUMNS COLUMN SLSR HEADING ‘Sales Rep | Number/Name’ FORMAT A20 COLUMN CUST HEADING ‘Customer | Number/Name’ FORMAT A30 COLUMN BAL HEADING ‘Current | Balance’ FORMAT $99,990.99 COLUMN CRED HEADING ‘Credit | Limit’ FORMAT $99,990.99 COLUMN AVAIL HEADING ‘Available | Credit’ FORMAT $99,990.99 SET LINESIZE 90 SET PAGESIZE 50 TTITLE ‘Customer Financial Report | Organized by Sales Rep’ BREAK ON REPORT ON SLSR SKIP 1 SET FEEDBACK OFF / SKIP 1 inserts one blank line between groups BREAK ON command sets break on SLSR column Removes selected rows message from the end of the report
Figure 12 – Blank lines added to the report Line breaks No feedback appears
Including Totals and Subtotals in a Report A total that appears after each group is called a subtotal. To calculate a subtotal, a BREAK command must be included to group the rows. Then a COMPUTE command can be used to indicate the computation for the subtotal, as shown in the following example: Include totals and subtotals in the report for the BAL and AVAIL columns. The COMPUTE command uses statistical functions to calculate the values to include in the report. In the above example, SUM is the appropriate function to use, as shown below: COMPUTE SUM OF BAL ON SLSR COMPUTE SUM OF AVAIL ON SLSR COMPUTE SUM OF BAL ON REPORT COMPUTE SUM OF AVAIL ON REPORT / The OF clause shown in the above commands includes the desired computations and the column names on which the computations are to occur. The ON clause indicates the point at which the computation is to occur.
Figure 14 – Adding computations to a report CLEAR COLUMNS COLUMN SLSR HEADING ‘Sales Rep | Number/Name’ FORMAT A20 COLUMN CUST HEADING ‘Customer | Number/Name’ FORMAT A30 COLUMN BAL HEADING ‘Current | Balance’ FORMAT $99,990.99 COLUMN CRED HEADING ‘Credit | Limit’ FORMAT $99,990.99 COLUMN AVAIL HEADING ‘Available | Credit’ FORMAT $99,990.99 SET LINESIZE 90 SET PAGESIZE 50 TTITLE ‘Customer Financial Report | Organized by Sales Rep’ BREAK ON REPORT ON SLSR SKIP 1 SET FEEDBACK OFF COMPUTE SUM OF BAL ON SLSR COMPUTE SUM OF AVAIL ON SLSR COMPUTE SUM OF BAL ON REPORT COMPUTE SUM OF AVAIL ON REPORT / Calculates sum of BAL and AVAIL at the end of each group Calculates sum of BAL and AVAIL at the end of the report
Figure 15 – Totals and subtotals included Break (end of records for sales rep 20) *********************** Subtotals for BAL and AVAIL *********************** *********************** Grand totals for BAL and AVAIL
Sending the Report to a File In some cases, there might be a need to print a report. The exact manner in which a report is printed depends on the DBMS. To print a report using Oracle, the output of the query is first sent to a file by using the SPOOL command. After spooling output to a file, the contents of the file can be printed. Send the report created in the previous examples to a file named SLSR_REPORT_OUTPUT.SQL. The command to do this is: SPOOL SLSR_REPORT_OUTPUT.SQL / SPOOL OFF The SPOOL SLSR_REPORT_OUTPUT.SQL command sends the output of subsequent commands to the file named SLSR_REPORT_OUTPUT.SQL. The final command (SPOOL OFF) turns off spooling and stops any further output from being sent to the SLSR_REPORT_OUTPUT.SQL file.
Figure 16 – Sending the report to a file CLEAR COLUMNS COLUMN SLSR HEADING ‘Sales Rep | Number/Name’ FORMAT A20 COLUMN CUST HEADING ‘Customer | Number/Name’ FORMAT A30 COLUMN BAL HEADING ‘Current | Balance’ FORMAT $99,990.99 COLUMN CRED HEADING ‘Credit | Limit’ FORMAT $99,990.99 COLUMN AVAIL HEADING ‘Available | Credit’ FORMAT $99,990.99 SET LINESIZE 90 SET PAGESIZE 50 TTITLE ‘Customer Financial Report | Organized by Sales Rep’ BREAK ON REPORT ON SLSR SKIP 1 SET FEEDBACK OFF COMPUTE SUM OF BAL ON SLSR COMPUTE SUM OF AVAIL ON SLSR COMPUTE SUM OF BAL ON REPORT COMPUTE SUM OF AVAIL ON REPORT SPOOL SLSR_REPORT_OUTPUT.SQL / SPOOL OFF SPOOL command sends output to a file named SLSR_REPORT_OUTPUT.SQL Turns off spooling
Completing the Script to Produce the Report The additional commands shown below can be included in the script to finish it: CLEAR COLUMNS CLEAR COMPUTE CLEAR BREAK TTITLE OFF COLUMN SLSR HEADING 'Sales Rep|Number/Name' FORMAT A20 COLUMN CUST HEADING 'Customer|Number/Name' FORMAT A30 COLUMN BAL HEADING 'Current|Balance' FORMAT $99,990.99 COLUMN CRED HEADING 'Credit|Limit' FORMAT $99,990.99 COLUMN AVAIL HEADING 'Available|Credit' FORMAT $99,990.99 SET LINESIZE 90 SET PAGESIZE 50 TTITLE 'Customer Financial Report|Organized by Sales Rep' BREAK ON REPORT ON SLSR SKIP 1 SET FEEDBACK OFF COMPUTE SUM OF BAL ON SLSR COMPUTE SUM OF AVAIL ON SLSR COMPUTE SUM OF BAL ON REPORT COMPUTE SUM OF AVAIL ON REPORT SPOOL SLSR_REPORT_OUTPUT.SQL SELECT * FROM SLSR_REPORT ORDER BY SLSR, CUST; SPOOL OFF
The first command, CLEAR COLUMNS, clears any previous column definitions. The next two commands have the same purpose. The CLEAR COMPUTE command clears any previously specified computations, and the CLEAR BREAK command clears any previous breaks. The TTITLE OFF command turns off any previously specified title at the top of the report (the BTITLE OFF command would turn off any previously specified title at the bottom of the report). Notice that the actual SQL query for the report is included in the completed script. Without this query, a user who runs this script would have to execute the query first and then run the script.
Figure 17 – Completed script Clears any previously defined breaks Clears any previous column definitions Clears any previously defined title CLEAR COLUMNS CLEAR COMPUTE CLEAR BREAK TTITLE OFF COLUMN SLSR HEADING ‘Sales Rep | Number/Name’ FORMAT A20 COLUMN CUST HEADING ‘Customer | Number/Name’ FORMAT A30 COLUMN BAL HEADING ‘Current | Balance’ FORMAT $99,990.99 COLUMN CRED HEADING ‘Credit | Limit’ FORMAT $99,990.99 COLUMN AVAIL HEADING ‘Available | Credit’ FORMAT $99,990.99 SET LINESIZE 90 SET PAGESIZE 50 TTITLE ‘Customer Financial Report | Organized by Sales Rep’ BREAK ON REPORT ON SLSR SKIP 1 SET FEEDBACK OFF COMPUTE SUM OF BAL ON SLSR COMPUTE SUM OF AVAIL ON SLSR COMPUTE SUM OF BAL ON REPORT COMPUTE SUM OF AVAIL ON REPORT SPOOL SLSR_REPORT_OUTPUT.SQL SELECT * FROM SLSR_REPORT ORDER BY SLSR, CUST; SPOOL OFF Clears any previously defined computations Query to produce the data for the report