I have these lines of code which you can find below and I want to automatize this (most probably using a loop function) by just giving the input: 'CITY', 'COUNTY', 'PARTNERS', 'PRODUCT'. Is there any way to do this? Also the names of temporary tables ('CUSTOMERS_MND_0', CUSTOMERS_MND_1', 'CUSTOMERS_MND_2', 'CUSTOMERS_MND_3', 'CUSTOMERS_MND_4') are not important, so those can be renamed as the variable names.
The issue I'm facing is that "UNIQUE_KEY" is not unique and I need to have it unique in the final db. Please find an example.
Initial DB:
| UNIQUE_KEY | CITY | COUNTY | PARTNERS | PRODUCT | 
|---|---|---|---|---|
| 111 | VIENNA | A | W | 1 | 
| 111 | NAPLES | B | X | 7 | 
| 112 | VIENNA | B | Y | 3 | 
| 113 | NAPLES | B | W | 4 | 
| 113 | NAPLES | A | W | 4 | 
| 114 | VIENNA | A | W | 1 | 
| 115 | VIENNA | B | W | 4 | 
| 115 | NAPLES | A | W | 4 | 
| 115 | VIENNA | B | X | 7 | 
| 115 | VIENNA | B | Y | 3 | 
| 116 | NAPLES | B | W | 4 | 
| 116 | NAPLES | A | W | 4 | 
| 116 | VIENNA | A | W | 1 | 
FINAL DB:
| UNIQUE_KEY | CITY | COUNTY | PARTNERS | PRODUCT | 
|---|---|---|---|---|
| 111 | VIENNA | A | W | 1 | 
| 112 | VIENNA | B | Y | 3 | 
| 113 | NAPLES | B | W | 4 | 
| 114 | VIENNA | A | W | 1 | 
| 115 | VIENNA | B | Y | 3 | 
| 116 | VIENNA | A | W | 1 | 
SELECT AA.*
INTO #CUSTOMERS_MND_1
FROM #CUSTOMERS_MND_0 AA
     INNER JOIN (SELECT UNIQUE_KEY,
                        MAX(CITY) AS MAXCITY
                 FROM #CUSTOMERS_MND_0
                 GROUP BY UNIQUE_KEY) BB ON AA.UNIQUE_KEY = BB.UNIQUE_KEY
                                        AND AA.CITY = BB.MAXCITY;
DROP TABLE #CUSTOMERS_MND_0;
SELECT AA.*
INTO #CUSTOMERS_MND_2
FROM #CUSTOMERS_MND_1 AA
     INNER JOIN (SELECT UNIQUE_KEY,
                        MAX(COUNTY) AS MAXCOUNTY
                 FROM #CUSTOMERS_MND_1
                 GROUP BY UNIQUE_KEY) BB ON AA.UNIQUE_KEY = BB.UNIQUE_KEY
                                        AND AA.COUNTY = BB.MAXCOUNTY;
DROP TABLE #CUSTOMERS_MND_1;
SELECT AA.*
INTO #CUSTOMERS_MND_3
FROM #CUSTOMERS_MND_2 AA
     INNER JOIN (SELECT UNIQUE_KEY,
                        MAX(PARTNERS) AS MAXPARTNERS
                 FROM #CUSTOMERS_MND_2
                 GROUP BY UNIQUE_KEY) BB ON AA.UNIQUE_KEY = BB.UNIQUE_KEY
                                        AND (AA.PARTNERS = BB.MAXPARTNERS
                                          OR AA.PARTNERS IS NULL
                                         AND BB.MAXPARTNERS IS NULL);
DROP TABLE #CUSTOMERS_MND_2;
SELECT AA.*
INTO #CUSTOMERS_MND_4
FROM #CUSTOMERS_MND_3 AA
     INNER JOIN (SELECT UNIQUE_KEY,
                        MAX(PRODUCT) AS MAXPRODUCT
                 FROM #CUSTOMERS_MND_3
                 GROUP BY UNIQUE_KEY) BB ON AA.UNIQUE_KEY = BB.UNIQUE_KEY
                                        AND (AA.PRODUCT = BB.MAXPRODUCT
                                          OR AA.PRODUCT IS NULL
                                         AND BB.MAXPRODUCT IS NULL);
DROP TABLE #CUSTOMERS_MND_3;
It works, but for more joins it is not time efficient.
 
    