Thursday, August 11, 2016

emails



SET ECHO  ON
SPOOL C:\TEMP\Email_Conversion_sqls.LOG
--Step 1 Insert into PS_EMAIL_ADDRESSES if the email does not exists.
--Select Statement
SELECT COUNT(*) FROM (SELECT A. EMPLID, 'BUSN',A.ZINEMAIL_ADDR,'N'
FROM PS_ZINEMAIL_TBL A
WHERE A.EMPLID IN (SELECT EMPLID FROM PS_JOB_CURR_VW)
AND A.ZINEMAIL_ADDR <>' '
AND NOT EXISTS( SELECT' X ' FROM PS_EMAIL_ADDRESSES C
WHERE A.EMPLID=C.EMPLID
AND C.E_ADDR_TYPE='BUSN')) ;
--Insert Statement
INSERT INTO PS_EMAIL_ADDRESSES
(EMPLID,E_ADDR_TYPE,EMAIL_ADDR,PREF_EMAIL_FLAG)
SELECT A. EMPLID, 'BUSN',A.ZINEMAIL_ADDR,'N'
FROM PS_ZINEMAIL_TBL A
WHERE A.EMPLID IN (SELECT EMPLID FROM PS_JOB_CURR_VW)
AND A.ZINEMAIL_ADDR <>' '
AND NOT EXISTS( SELECT' X ' FROM PS_EMAIL_ADDRESSES C
WHERE A.EMPLID=C.EMPLID
AND C.E_ADDR_TYPE='BUSN') ;  

--Step 2 Update Email address if it differs in both records
--Select Statement
 SELECT COUNT(*) FROM (SELECT A.EMPLID,A.ZINEMAIL_ADDR,E.EMAIL_ADDR
FROM PS_ZINEMAIL_TBL A,PS_EMAIL_ADDRESSES E
WHERE  A.EMPLID IN (SELECT EMPLID FROM PS_JOB_CURR_VW)
AND  A.EMPLID=E.EMPLID
AND TRIM(A.ZINEMAIL_ADDR) <>' '
AND E.E_ADDR_TYPE='BUSN'
AND UPPER (A.ZINEMAIL_ADDR)<> UPPER(E.EMAIL_ADDR)) ;
--Update Statement
UPDATE PS_EMAIL_ADDRESSES E SET  E.EMAIL_ADDR =
(SELECT  A.ZINEMAIL_ADDR
FROM PS_ZINEMAIL_TBL A
WHERE  A.EMPLID IN (SELECT EMPLID FROM PS_JOB_CURR_VW)
AND  A.EMPLID=E.EMPLID
AND TRIM(A.ZINEMAIL_ADDR) <>' '
AND E.E_ADDR_TYPE='BUSN'
AND UPPER (A.ZINEMAIL_ADDR) <> UPPER(E.EMAIL_ADDR)  )
WHERE EXISTS ( SELECT  'X'
FROM PS_ZINEMAIL_TBL A
WHERE A.EMPLID IN (SELECT EMPLID FROM PS_JOB_CURR_VW)
AND TRIM(A.ZINEMAIL_ADDR) <>' '
AND  A.EMPLID=E.EMPLID
AND E.E_ADDR_TYPE='BUSN'
AND UPPER (A.ZINEMAIL_ADDR) <> UPPER(E.EMAIL_ADDR)  );
--Step 3 Check the mails are updated in EMAIL_ADDRESSES
--Select Statement
SELECT COUNT(*) FROM  (SELECT A.EMPLID,A.E_ADDR_TYPE,A.EMAIL_ADDR,B.ZINEMAIL_ADDR FROM PS_EMAIL_ADDRESSES A , PS_ZINEMAIL_TBL B
WHERE A.EMPLID=B.EMPLID AND A.E_ADDR_TYPE='BUSN' AND B.ZINEMAIL_ADDR <> ' '
AND UPPER(TRIM(A.EMAIL_ADDR)) <> UPPER(TRIM(B.ZINEMAIL_ADDR))
and A.EMPLID IN (SELECT EMPLID FROM PS_JOB_CURR_VW)) ;

--step 4 If there is only one Email Address type then make it Preferred flag
--Select Statement
SELECT COUNT (*) FROM (SELECT DISTINCT EMPLID, COUNT( EMAIL_ADDR)  FROM PS_EMAIL_ADDRESSES WHERE EMPLID IN (SELECT EMPLID FROM PS_JOB_CURR_VW)
GROUP BY EMPLID
HAVING COUNT( EMAIL_ADDR) = 1);
--Update Statement
UPDATE PS_EMAIL_ADDRESSES E
   SET E.PREF_EMAIL_FLAG = 'Y'
 WHERE 1 = (SELECT COUNT ('X')
              FROM PS_EMAIL_ADDRESSES E1
             WHERE E1.EMPLID = E.EMPLID)
            AND E.EMPLID IN (SELECT EMPLID FROM PS_JOB_CURR_VW);
--Step 5 If there is a ‘BUSN’ Email type for the employee, set its PREF_EMAIL_FLAG to ‘Y’provided he doesnt have any other preferred mail type
--Select Statement
SELECT COUNT(*) FROM (SELECT EMPLID,E_ADDR_TYPE,PREF_EMAIL_FLAG FROM PS_EMAIL_ADDRESSES WHERE E_ADDR_TYPE='BUSN' AND PREF_EMAIL_FLAG='N'
AND EMPLID NOT IN (SELECT EMPLID FROM PS_EMAIL_ADDRESSES WHERE PREF_EMAIL_FLAG='Y'));
--Update Statement
UPDATE PS_EMAIL_ADDRESSES SET PREF_EMAIL_FLAG='Y'  WHERE (EMPLID,E_ADDR_TYPE) IN (
SELECT EMPLID,E_ADDR_TYPE FROM PS_EMAIL_ADDRESSES WHERE E_ADDR_TYPE='BUSN' AND PREF_EMAIL_FLAG='N'
AND EMPLID NOT IN (SELECT EMPLID FROM PS_EMAIL_ADDRESSES WHERE PREF_EMAIL_FLAG='Y') );
--Step 6 If  ‘BUSN’ does not exist and is not set as preferred then select the first phone type (alphabetically) and set its PREF_PHONE_FLAG = ‘Y’
--Select Statement
    SELECT COUNT(*) FROM (SELECT E.EMPLID FROM PS_EMAIL_ADDRESSES E
              WHERE NOT EXISTS
                           (SELECT 'X'
                              FROM PS_EMAIL_ADDRESSES E1
                             WHERE E.EMPLID = E1.EMPLID
                                   AND E1.E_ADDR_TYPE = 'BUSN')
                    AND NOT EXISTS
                           (SELECT 'X'
                              FROM PS_EMAIL_ADDRESSES E1
                             WHERE E.EMPLID = E1.EMPLID
                                   AND E.PREF_EMAIL_FLAG = 'Y')
           GROUP BY EMPLID
             HAVING COUNT ('X') > 1);
--Update Statement
UPDATE PS_EMAIL_ADDRESSES A
   SET PREF_EMAIL_FLAG = 'Y'
 WHERE A.EMPLID IN
          (  SELECT E.EMPLID
               FROM PS_EMAIL_ADDRESSES E
              WHERE NOT EXISTS
                           (SELECT 'X'
                              FROM PS_EMAIL_ADDRESSES E1
                             WHERE E.EMPLID = E1.EMPLID
                                   AND E1.E_ADDR_TYPE = 'BUSN')
                    AND NOT EXISTS
                     (SELECT 'X'
                      FROM PS_EMAIL_ADDRESSES E1
                     WHERE E.EMPLID = E1.EMPLID
                           AND E.PREF_EMAIL_FLAG = 'Y')
           GROUP BY EMPLID
             HAVING COUNT ('X') > 1)
             AND   A.E_ADDR_TYPE = (SELECT MIN(B.E_ADDR_TYPE) FROM PS_EMAIL_ADDRESSES B WHERE B.EMPLID =A.EMPLID);


--Step 7 if there is more than one Email type set as preferred change the other email types as 'N' except 'BUSN'

--Select Statement
SELECT COUNT (*) FROM (SELECT EMPLID, COUNT( PREF_EMAIL_FLAG)
FROM PS_EMAIL_ADDRESSES  WHERE PREF_EMAIL_FLAG='Y'
GROUP BY EMPLID
HAVING COUNT( PREF_EMAIL_FLAG) > 1);
--Update Statement i
UPDATE PS_EMAIL_ADDRESSES E SET E.PREF_EMAIL_FLAG = 'N'
 WHERE EXISTS (SELECT 'X' FROM PS_EMAIL_ADDRESSES WHERE E_ADDR_TYPE = 'BUSN' AND PREF_EMAIL_FLAG='Y'
               AND EMPLID=E.EMPLID)
 AND E.EMPLID IN
          (SELECT EMPLID
             FROM PS_EMAIL_ADDRESSES
            WHERE EMPLID IN (  SELECT EMPLID
                                 FROM PS_EMAIL_ADDRESSES
                                WHERE PREF_EMAIL_FLAG = 'Y'
                                  GROUP BY EMPLID
                               HAVING COUNT (PREF_EMAIL_FLAG) > 1))  AND E.E_ADDR_TYPE <> 'BUSN' ;
                              
                              
--Step 8 if there is more than one Email type set as preferred change the other email types as 'N' except for the lowest ascending ordered email type                              
UPDATE PS_EMAIL_ADDRESSES A
   SET PREF_EMAIL_FLAG = 'N'
 WHERE A.EMPLID IN
          (SELECT EMPLID
                   FROM PS_EMAIL_ADDRESSES
                  WHERE EMPLID IN (  SELECT EMPLID
                                       FROM PS_EMAIL_ADDRESSES
                                      WHERE PREF_EMAIL_FLAG = 'Y'
                                        GROUP BY EMPLID
                               HAVING COUNT (PREF_EMAIL_FLAG) > 1))
             AND   A.E_ADDR_TYPE > (SELECT MIN(B.E_ADDR_TYPE) FROM PS_EMAIL_ADDRESSES B WHERE B.EMPLID =A.EMPLID);
                              
SET SPOOL OFF;
SET ECHO OFF;

                                

No comments: