Synetrix
Synetrix

Reputation: 59

SQL Query Join Tables

I am trying to join tables based on the primary key of address no, 1. However, the issue below creates duplicate record for the same address no. 003 78057911 (wpphtp !=F) and 003 78057922 (wpphtp = F) are the same fields in the database, however I want to extract it on a different column. How can I do so?

 select ABAN8,'CREATE',ABALPH, '','', '','','','','','', EAEMAL,'',
                 CASE
                      WHEN wpphtp != 'F'
                         THEN WPAR1
          else ' '
                 END AS prefix ,'', CASE
                      WHEN wpphtp != 'F'
                         THEN WPph1
          else ' '
                 END AS phone, '',CASE
                      WHEN wpphtp = 'F'
                         THEN wpar1
          else ' '
                 END AS prefixfax,' ',CASE
                      WHEN wpphtp = 'F'
                         THEN wpph1
          else ' '
                 END AS fax  from PRODDTA.F0111 
    join PRODDTA.F01151 on proddta.f0111.wwan8 = PRODDTA.F01151.EAAN8   
    join PRODDTA.F0115 JOIN PRODDTA.F0101 ON PRODDTA.F0115.wpAN8 = PRODDTA.F0101.ABAN8  
    ON PRODDTA.F0115.wpAN8 = PRODDTA.F0111.wwAN8 where wwidln < 1
   order by wwan8

Result:

1 | CREATE | E-GLOBAL INNOVATIVE SDN BHD | [email protected]   | 003 | 78057911
1 | CREATE | E-GLOBAL INNOVATIVE SDN BHD | [email protected] | 003 | 78057911
1 | CREATE | E-GLOBAL INNOVATIVE SDN BHD | [email protected]   | 003 | 78057922
1 | CREATE | E-GLOBAL INNOVATIVE SDN BHD | [email protected] | 003 | 78057922

Expected Result:

1   CREATE | E-GLOBAL INNOVATIVE SDN BHD | [email protected]   | 003 | 78057911 | 003 | 78057922
1   CREATE | E-GLOBAL INNOVATIVE SDN BHD | [email protected] | 003 | 78057911 | 003 | 78057922

Upvotes: 0

Views: 83

Answers (1)

Nick
Nick

Reputation: 147166

You can use conditional aggregation to get the values for different wpphtp in different columns. Without seeing table structures and sample data it's hard to be 100% certain but this should work:

select ABAN8,'CREATE',ABALPH, '','', '','','','','','', EAEMAL,'',
       MAX(CASE WHEN wpphtp != 'F' THEN WPAR1 END) AS prefix,'',
       MAX(CASE WHEN wpphtp != 'F' THEN WPph1 END) AS phone, '',
       MAX(CASE WHEN wpphtp = 'F'  THEN wpar1 END) AS prefixfax,' ',
       MAX(CASE WHEN wpphtp = 'F'  THEN wpph1 END) AS fax
from PRODDTA.F0111 
join PRODDTA.F01151 on proddta.f0111.wwan8 = PRODDTA.F01151.EAAN8   
join PRODDTA.F0115 JOIN PRODDTA.F0101 ON PRODDTA.F0115.wpAN8 = PRODDTA.F0101.ABAN8  
  ON PRODDTA.F0115.wpAN8 = PRODDTA.F0111.wwAN8 where wwidln < 1
GROUP BY -- add all the other column names here
order by wwan8

In the GROUP BY clause, you need to add all the other column names (i.e. everything except prefix, phone, prefixfax and fax).

Upvotes: 1

Related Questions