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.