Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何跨多个列聚合数据?_Sql_Sql Server_Azure Sql Database - Fatal编程技术网

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