Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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:for循环基于当前值创建新字段_Sql_Database - Fatal编程技术网

SQL:for循环基于当前值创建新字段

SQL:for循环基于当前值创建新字段,sql,database,Sql,Database,这可能是一个奇怪的问题,因为我从来没有尝试过这个,它只是出现在我的脑海里。 我有一个表,其中包含一个名为“countries”的列以及用户ID和日期。我想统计一下每个国家在每一天有多少活跃用户。我想到的最简单的事情是创建新的字段,如country_usa,显示美国的用户数量。例如: date ___ country_usa ___ country_england ____ country_mexico 2020 ___ 344. ____ 566 ____ 8

这可能是一个奇怪的问题,因为我从来没有尝试过这个,它只是出现在我的脑海里。 我有一个表,其中包含一个名为“countries”的列以及用户ID和日期。我想统计一下每个国家在每一天有多少活跃用户。我想到的最简单的事情是创建新的字段,如country_usa,显示美国的用户数量。例如:

date ___ country_usa ___ country_england ____ country_mexico
2020 ___ 344.       ____  566            ____ 889876
2019 ___ 678        _____ 7899.         ____ 8765
我知道我可以使用case方法创建类似于上表的内容。比如说

select case when country = 'usa' then count(distinct player_id) end as country_usa

然而,这似乎是一个很大的工作,特别是有这么多的国家在我的桌子上。做这件事最快的方法是什么?是否可以使用循环执行此操作?

您希望将
大小写作为
count()
函数的参数:

select count(distinct case when country = 'usa' then player_id end) as country_usa

相反,您可以创建一个仅仅是价值总结的视图

Select Country, date, Count(player_id) from Table
Group By Country, date
编辑:您还可以使用枢轴功能

SELECT date, [usa] AS country_usa , [england] AS country_england , [mexico] AS country_mexico 
FROM   
(SELECT Select Country, date, player_id FROM table) p  
PIVOT  
(  
COUNT (player_id )  
FOR Country IN  
( [usa], [england], [mexico])  
) AS pvt  
ORDER BY pvt.date;  

您可能需要清理它的语法,但我认为这就是您要找的

谢谢!但这只会为美国创造一个领域,有没有一个像loop这样的东西可以自动为所有国家创造呢?@Josh。你会为你关心的每个国家重复这个逻辑。太好了!但我需要相反的格式。就像我上面提到的。有可能吗?是的,你需要使用Pivot功能,你可以在这里找到信息,我会编辑我的评论来展示一个完美的例子!非常感谢:)完成了,我希望这就是你想要的