我有一个包含原始数据的表,如下所示:
geoid business
-------------------
1 BestBuy
1 WalMart
1 Target
2 BestBuy
2 Target
2 BestBuy
3 WalMart
这些业务映射到另一个表中的列,如下所示:
BestBuy -> BigBox_1
Walmart -> BigBox_2
Target -> BigBox_3
我正在尝试寻找一种干净的方法来查询原始数据表并填充目标表,该表应表示相同的数据,如下所示:
geoid BigBox_1_Count BigBox_2_Count BigBox_3_Count
----------------------------------------------------------
1 | 1 | 1 | 1
2 | 2 | 0 | 1
3 | 0 | 0 | 1
我意识到我可以使用以下三个不同的查询来做到这一点:
INSERT INTO destTable (geoid, BigBox_1_Count)
SELECT geoid, COUNT(*) WHERE business = 'BestBuy'
,然后更新其他两个语句。
但是我想知道是否有一种方法可以通过单个插入语句将所有计数插入到适当的列中?能做到吗?
注意-我意识到此表结构并不理想。我没有创建它,而是重新设计它是我的工作清单,但是现在我需要使用已有的东西。
答案 0 :(得分:2)
我会进行聚合:
INSERT INTO destTable (geoid, BigBox_1_Count, . . . )
SELECT geoid,
SUM(CASE WHEN business = 'BestBuy' THEN 1 ELSE 0 END) AS BigBox_1_Count,
SUM(CASE WHEN business = 'WalMart' THEN 1 ELSE 0 END) AS BigBox_2_Count,
SUM(CASE WHEN business = 'Target' THEN 1 ELSE 0 END) AS BigBox_3_Count
FROM table t
GROUP BY geoid;