Sql 如何跨多个列聚合数据?
我有一个包含原始数据的表,如下所示:Sql 如何跨多个列聚合数据?,sql,sql-server,azure-sql-database,Sql,Sql Server,Azure Sql Database,我有一个包含原始数据的表,如下所示: geoid business ------------------- 1 BestBuy 1 WalMart 1 Target 2 BestBuy 2 Target 2 BestBuy 3 WalMart INSERT INTO destTable (geoid, BigBox_1_Count) SELECT geoid, COUNT(*) WHERE business = 'Best
geoid business
-------------------
1 BestBuy
1 WalMart
1 Target
2 BestBuy
2 Target
2 BestBuy
3 WalMart
INSERT INTO destTable (geoid, BigBox_1_Count)
SELECT geoid, COUNT(*) WHERE business = 'BestBuy'
这些业务映射到另一个表中的列,如下所示:
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
我意识到我可以通过以下三种不同的查询来实现这一点:
geoid business
-------------------
1 BestBuy
1 WalMart
1 Target
2 BestBuy
2 Target
2 BestBuy
3 WalMart
INSERT INTO destTable (geoid, BigBox_1_Count)
SELECT geoid, COUNT(*) WHERE business = 'BestBuy'
然后更新另外两个的语句
但是我想知道是否有一种方法可以用一个insert语句将所有计数插入到相应的列中?这能做到吗
注意-我意识到这个表结构并不理想。我没有创建它,重新设计它是我要做的事情之一,但现在我需要使用我现有的东西。我会做:
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;
我会这样做:
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;
您知道是否可以对企业名称进行类似于的查询?这样我就可以做一些像“百思买%”这样的
生意了?@AbeMiessler。是的,您可以在case
表达式中使用LIKE
。您知道是否可以对企业名称执行类似于LIKE
的查询?这样我就可以做一些像“百思买%”这样的生意了?@AbeMiessler。是的,您可以在case
表达式中使用LIKE