Using QMF

Merging data from multiple tables into a single column

You can merge data from two or more tables into a single column on a report by using the keyword UNION. First, you create two or more queries to select the data you want to merge, and then you specify the keyword UNION between the queries.

In Figure 64, the first query selects the department name and number from the Q.ORG table, and creates a new column that displays the words WAITING FOR WORK. The second query selects the department name and number from the Q.PROJECT and Q.ORG tables, and creates a new column that displays the words HAS WORK. The database determines the name of the new column, unless you change it using QMF forms.

Select the same number of columns for each query. Corresponding columns must be the same general data type, and must both either allow null values or not allow null values. If you want to order the columns, specify a column number, because the names of the columns you are merging are probably different. If you want to display duplicate rows on the report, specify UNION ALL instead of UNION.

Figure 64. This SQL query merges data from two columns into one.


SELECT DEPTNUMB, DEPTNAME, 'WAITING FOR WORK'
    FROM Q.ORG
    WHERE DEPTNUMB NOT IN (SELECT DEPT FROM Q.PROJECT)
UNION
SELECT O.DEPTNUMB, O.DEPTNAME, 'HAS WORK'
    FROM Q.PROJECT P, Q.ORG O
    WHERE P.DEPT = O.DEPTNUMB
ORDER BY 1

QMF displays the following report when you run the query, showing the department names and numbers and their status information on the same report.

Figure 65. The report shows the two new columns merged into one.

+--------------------------------------------------------------------------------+
|   DEPTNUMB  DEPTNAME        EXPRESSION 1                                       |
|   --------  --------------  ----------------                                   |
|         10  HEAD OFFICE     HAS WORK                                           |
|         15  NEW ENGLAND     HAS WORK                                           |
|         20  MID ATLANTIC    HAS WORK                                           |
|         38  SOUTH ATLANTIC  HAS WORK                                           |
|         42  GREAT LAKES     HAS WORK                                           |
|         51  PLAINS          HAS WORK                                           |
|         66  PACIFIC         HAS WORK                                           |
|         84  MOUNTAIN        WAITING FOR WORK                                   |
+--------------------------------------------------------------------------------+

You can specify the order in which you want to merge the columns from multiple tables. Specifying order is important when you use UNION and UNION ALL. Use parentheses to indicate which table's columns you want merged first. The conditions inside the parentheses are checked first, and then the conditions outside the parentheses.

For example, this query produces Report A in Figure 66:

 (SELECT ID, NAME, SALARY
     FROM Q.STAFF
     WHERE SALARY>12000
 UNION ALL
 SELECT ID, NAME, SALARY
     FROM Q.STAFF
     WHERE DEPT=38)
 UNION
 SELECT ID, NAME, SALARY
     FROM Q.STAFF
     WHERE JOB='SALES'

If you move the parentheses, the same query produces Report B in Figure 66:

 SELECT ID, NAME, SALARY
     FROM Q.STAFF
     WHERE SALARY>12000
 UNION ALL
 (SELECT ID, NAME, SALARY
     FROM Q.STAFF
     WHERE DEPT=38
 UNION
 SELECT ID, NAME, SALARY
     FROM Q.STAFF
     WHERE JOB='SALES')

Figure 66. The two reports show the differences in merging order.

+--------------------------------------------------------------------------------+
|            REPORT A                             REPORT B                       |
|      ID  NAME           SALARY            ID  NAME           SALARY            |
|  ------  ---------  ----------        ------  ---------  ----------            |
|      10  SANDERS      18357.50            20  PERNAL       18171.25            |
|      20  PERNAL       18171.25            30  MARENGHI     17506.75            |
|      30  MARENGHI     17506.75            40  O'BRIEN      18006.00            |
|      40  O'BRIEN      18006.00            60  QUIGLEY      16808.30            |
|      50  HANES        20659.80            70  ROTHMAN      16502.83            |
|      60  QUIGLEY      16808.30            90  KOONITZ      18001.75            |
|      70  ROTHMAN      16502.83           120  NAUGHTON     12954.75            |
|      80  JAMES        13504.60           150  WILLIAMS     19456.50            |
|      90  KOONITZ      18001.75           180  ABRAHAMS     12009.75            |
|     100  PLOTZ        18352.80           220  SMITH        17654.50            |
|     110  NGAN         12508.20           280  WILSON       18674.50            |
|     120  NAUGHTON     12954.75           300  DAVIS        15454.50            |
|     140  FRAYE        21150.00           310  GRAHAM       21000.00            |
|     150  WILLIAMS     19456.50           320  GONZALES     16858.20            |
|     160  MOLINARE     22959.20           340  EDWARDS      17844.00            |
|     170  KERMISCH     12258.50            10  SANDERS      18357.50            |
|     180  ABRAHAMS     12009.75            20  PERNAL       18171.25            |
|     190  SNEIDER      14252.75            30  MARENGHI     17506.75            |
|     210  LU           20010.00            40  O'BRIEN      18006.00            |
|     220  SMITH        17654.50            50  HANES        20659.80            |
|     230  LUNDQUIST    13369.80            60  QUIGLEY      16808.30            |
|     240  DANIELS      19260.25            70  ROTHMAN      16502.83            |
|     250  WHEELER      14460.00            80  JAMES        13504.60            |
|     260  JONES        21234.00            90  KOONITZ      18001.75            |
|     270  LEA          18555.50           100  PLOTZ        18352.80            |
|     280  WILSON       18674.50           110  NGAN         12508.20            |
|     290  QUILL        19818.00           120  NAUGHTON     12954.75            |
|     300  DAVIS        15454.50           140  FRAYE        21150.00            |
|     310  GRAHAM       21000.00           150  WILLIAMS     19456.50            |
|     320  GONZALES     16858.20           160  MOLINARE     22959.20            |
|     340  EDWARDS      17844.00           170  KERMISCH     12258.50            |
|     350  GAFNEY       13030.50           180  ABRAHAMS     12009.75            |
+--------------------------------------------------------------------------------+

The first query selects employees whose salaries are greater than $12,000.00 and all employees from Department 38. Then, it eliminates any duplicate entries by selecting only employees who work in sales and are not in Department 38 or making more than $12,000.00 a year.

The second query creates duplicate entries because it first selects employees from Department 38 and employees from outside Department 38 who work in sales. Then, it adds employees whose salaries are more than $12,000.00.


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]