sql-server - SQL Server : splitting the results of GROUP BY into a separate columns

标签 sql-server sql-server-2008-r2

我有一个包含大约 5 亿行数据的 SQL Server 2008 R2 数据库,它目前看起来像这样

ID          Eventtype
201         1
201         3
201         4
201         1
201         1
664         1
664         0
664         1
664         3

我似乎找不到以这种格式提供数据的查询:
ID         Event0   Event1  Event2  Event3  Event4
201        0        3       0       1       1
664        1        2       0       1       0

这是我目前得到的:
select distinct ID as ID, count(EventType)
from database.dbo.events 
group by questID, EventType

它将数据吐回给我,例如:
ID       EventType
201      0
201      3
201      0
201      1
201      1
664      1
664      2
664      0
etc.

这确实显示了我需要的所有数据,但试图找出哪个 EventType 所涉及的格式和猜测工作这是非常令人沮丧的。

任何人都可以提出一个更好的查询来以良好的格式返回数据吗?

最佳答案

pivot Sql Server 中的功能。例如,如果您有 6 个不同的事件,则可以使用以下命令:

select ID, [0], [1], [2], [3], [4], [5]
from events
pivot 
(
  -- aggregate function to apply on values
  count(EventType) 
  -- list of keys. If values of keys are not fixed,
  -- you will have to use dynamic sql generation 
  for EventType in ([0], [1], [2], [3], [4], [5])
) pvt

有关动态枢轴生成,请参阅 this SO post .

顺便说一句,我相信您的原始查询应为:
select ID, EventType, count(EventType)
from events 
group by ID, EventType
order by ID, EventType

你可以看到它在行动@ Sql Fiddle (向下滚动以查看旋转结果)。

关于sql-server - SQL Server : splitting the results of GROUP BY into a separate columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006449/

相关文章:

c# - 如何将数字添加到 Sqlcommand.Parameters?

sql - 如何以特定格式显示sql查询

.net - 在 .net 3.5 框架和 IIS 7.0 中使用 sqlserver session 状态时是否需要序列化属性

sql-server - case 语句中按参数值排序并不总是有效,但如果硬编码则可以

sql - 如何从上面的行中选择信息?

SQL2008 无分词器的全文索引搜索

silverlight-4.0 - Entity Framework 4 和 SQL Server 2008 R2 更改数据捕获不能很好地协同工作

sql-server-2008-r2 - SCOPE_IDENTITY 回读

asp.net - 标识列增量跳转

c# - 如何保持 sql 依赖性达到其目的