Sql 在表中存储值的计数

Sql 在表中存储值的计数,sql,sql-server-2008,Sql,Sql Server 2008,我有一个表,其中包含以下(大量简化)行的数据: User | Value -----|------ UsrA | 100 UsrA | 102 UsrB | 100 UsrA | 100 UsrB | 101 而且,由于一些难以理解的原因,我需要将每个值的计数存储在一个表中,以备将来检索——最终得到如下结果 User | Value100Count | Value101Count | Value102Count -----|---------------|---------

我有一个表,其中包含以下(大量简化)行的数据:

User | Value
-----|------
UsrA |   100
UsrA |   102
UsrB |   100
UsrA |   100
UsrB |   101
而且,由于一些难以理解的原因,我需要将每个值的
计数
存储在一个表中,以备将来检索——最终得到如下结果

User | Value100Count | Value101Count | Value102Count
-----|---------------|---------------|--------------
UsrA |             2 |             0 |             1
UsrB |             1 |             1 |             0

但是,最多可以有255个不同的
s-这意味着可能有255个不同的
值计数
列。我知道这是一种可怕的方法,但是有没有一种简单的方法可以将数据转换成可以轻松地插入目标表的格式?是否有更好的方法来存储每个用户的值<代码>计数<代码>(不幸的是,我确实需要存储这些信息;每次从源表中获取它不是一个选项)?

整个事物不是很漂亮,但是你知道,而不是你的255列表,我会考虑设置另一个表:

User | Value | CountOfValue
并在用户和值上设置主键

然后可以将给定用户/值组合的计数插入CountOfValue字段


正如我所说的,设计很糟糕,感觉最好从头开始,规范化并实时进行计数。

查看索引视图。您可以自动维护表格的完整性,并且作为奖励,它可以用于已经对该数据进行计数(*)的查询。

最好规范化您的表格,或者保持您的总计准确度(在主表格上更改时更新/删除/创建),并在夜间(夜间作业)同步一次,或者。。。正如Fabio所说,规范化您的表,一个编写良好的join/group by语句应该可以提供非常快速的计数。带有循环的简单脚本将使您同意最好规范化数据,但是如果值列表是静态的,那么如果您使用的是Oracle DB,您可以使用pivot语法。不幸的是,“源”表是遗留系统的输出,在系统中进行探测,不可能对格式进行任何更改:(