【发布时间】:2016-01-14 13:09:20
【问题描述】:
让我们试试这个方法。
如您所见,我有很多 SELECT(我只展示了 3 个,但我有 20 多个),我需要统一所有这些。每次我需要添加一个品牌时,我都必须一个一个地更改所有的选择。这很无聊。
另外,我有超过 10 个品牌(不仅仅是 3 个),我也需要一一输入。如果我可以只更改 1 次并让 WHILE LOOP 为其他 SELECT 完成其余的工作,这还不错。但是,如果我必须为所有 SELECT 更改所有品牌,我会花费很多时间。
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
我希望现在可以理解了。感谢您的帮助!
【问题讨论】:
-
你的数据库是mysql还是sql-server?
标签: mysql sql sql-server while-loop union