Let's try this way.
As you can see, I have many SELECT's (I'm showing just 3 but I have more than 20) and I need to unify all of them. Everytime when I need to add a Brand, I have to change ALL the SELECT's, one by one. This is quite boring.
Also, I have more than 10 Brands (not only 3) and I need to type one by one too. This is not so bad if I can change just 1 time and let the WHILE LOOP do the rest for the other SELECTs. But if I have to change all the brands for all SELECT's, it takes me a lot of time.
DECLARE @COUNTRY varchar(30)
SET @COUNTRY = 'GERMANY'
SELECT * FROM
(SELECT * FROM
(SELECT
FOOD_CATEGORY,
YEAR_SALE,
CASE WHEN SUM(SALES)=0 THEN 0
ELSE ROUND(SUM(CASE WHEN FABRICANTE='BRAND A' THEN ROUND(SALES,3) ELSE 0 END)/SUM(SALES),3)
END AS Share_A,
CASE WHEN SUM(SALES)=0 THEN 0
ELSE ROUND(SUM(CASE WHEN FABRICANTE='BRAND B' THEN ROUND(SALES,3) ELSE 0 END)/SUM(SALES),3)
END AS Share_B,
CASE WHEN SUM(SALES)=0 THEN 0
ELSE ROUND(SUM(CASE WHEN FABRICANTE='BRAND C' THEN ROUND(SALES,3) ELSE 0 END)/SUM(SALES),3)
END AS Share_C
FROM tableChicken
WHERE
AREA = @COUNTRY
GROUP BY
FOOD_CATEGORY,
YEAR_SALE) AS CHICKEN
UNION
SELECT * FROM
(SELECT
FOOD_CATEGORY,
YEAR_SALE,
CASE WHEN SUM(SALES)=0 THEN 0
ELSE ROUND(SUM(CASE WHEN FABRICANTE='BRAND A' THEN ROUND(SALES,3) ELSE 0 END)/SUM(SALES),3)
END AS Share_A,
CASE WHEN SUM(SALES)=0 THEN 0
ELSE ROUND(SUM(CASE WHEN FABRICANTE='BRAND B' THEN ROUND(SALES,3) ELSE 0 END)/SUM(SALES),3)
END AS Share_B,
CASE WHEN SUM(SALES)=0 THEN 0
ELSE ROUND(SUM(CASE WHEN FABRICANTE='BRAND C' THEN ROUND(SALES,3) ELSE 0 END)/SUM(SALES),3)
END AS Share_C
FROM tableSwine
WHERE
AREA = @COUNTRY
GROUP BY
FOOD_CATEGORY,
YEAR_SALE) AS SWINE
UNION
SELECT * FROM
(SELECT
FOOD_CATEGORY,
YEAR_SALE,
CASE WHEN SUM(SALES)=0 THEN 0
ELSE ROUND(SUM(CASE WHEN FABRICANTE='BRAND A' THEN ROUND(SALES,3) ELSE 0 END)/SUM(SALES),3)
END AS Share_A,
CASE WHEN SUM(SALES)=0 THEN 0
ELSE ROUND(SUM(CASE WHEN FABRICANTE='BRAND B' THEN ROUND(SALES,3) ELSE 0 END)/SUM(SALES),3)
END AS Share_B,
CASE WHEN SUM(SALES)=0 THEN 0
ELSE ROUND(SUM(CASE WHEN FABRICANTE='BRAND C' THEN ROUND(SALES,3) ELSE 0 END)/SUM(SALES),3)
END AS Share_C
FROM tableTurkey
WHERE
AREA = @COUNTRY
GROUP BY
FOOD_CATEGORY,
YEAR_SALE) AS TURKEY
) AS MAIN_BASE
ORDER BY FOOD_CATEGORY, YEAR_SALE
I hope it's understandable now. Thanks for helping!