【问题标题】:Can I use pivot to get counts for each value groups on MSSQL?我可以使用 pivot 来获取 MSSQL 上每个值组的计数吗?
【发布时间】:2014-08-06 08:41:49
【问题描述】:

我有很多数字要分组。

更新:
这些都在一列中,下面是“从表中选择列”的结果

col
12
11
23
22
41
12
37
15
41
23
77
.
.
more
.


我想要一张像下面这样的表格。

0~9    10~19    20~29    30~39    40~49    50~59    60~
1      5        4        6        5        2        3


这可能与枢轴?或者只是我需要做一些类似的事情

CASE WHEN COL>=0 AND COL<10 THEN 1 ELSE 0 END AS '0~9'
...

有一堆案例?

【问题讨论】:

  • 我认为你需要两者。首先是生成范围列的查询,然后是要透视的查询。
  • 这些数字是一行还是一列?从您的问题中并不清楚。
  • 在一列中。很抱歉造成混乱。
  • 如果您对列名不挑剔,只需以整数除以 10 的结果为中心。

标签: sql-server sql-server-2012 integer pivot


【解决方案1】:

如果您想解决 THIS 非常具体的示例,您可以使用:

select [0] [0˜9], [1] [10˜19], [2] [20˜29], [3] [30˜39], [4] [40˜49], [5] [50˜59], [6] [60˜]
from Table1
cross apply (select case when number >= 60 then 6 else cast(number/10 as int) end) N(Decade)
pivot (count(number) for Decade in ([0],[1],[2],[3],[4],[5],[6]))  A

SQL Fiddle

更新

根据 OP 自己的答案,适合他的情况的答案是:

select [0] [0˜9], [1] [10˜19], [2] [20˜29], [3] [30˜39], [4] [40˜49], [5] [50˜59], [6] [60˜]
from (select number from Table1) O
cross apply (select case when number >= 60 then 6 else cast(number/10 as int) end) N(Decade)
pivot (count(number) for Decade in ([0],[1],[2],[3],[4],[5],[6]))  A

SQL Fiddle

【讨论】:

  • 这给了我'select case when x>0 and x
  • 我真的不明白。有什么不同?结果似乎相同,并且枢轴已经在聚合值。你能给我举一个这个结果不适用的例子吗?
  • 请参考我的回答更新。我的回答可能有错误(我尝试使用确切的方法和语法,但我对 mssql 几乎是新手 :( ),所以如果您发现任何错误,欢迎您。
  • 不同之处在于您的表还有其他列,并且查询正在计算由其他列隔离的值。为了解决这个问题,只需要从子查询中选择一个调用。它是聚合值,但像您一样在所有其他列中使用 GROUP BY。为了让您更清楚,如果您有兴趣,请在第一个查询中将[0] [0˜9], [1] [10˜19], [2] [20˜29], [3] [30˜39], [4] [40˜49], [5] [50˜59], [6] [60˜] 替换为*
  • 啊..对。为什么我不能考虑一下……谢谢你所做的一切!
【解决方案2】:

这对我来说是一个结果。

select [0] [0˜9], [1] [10˜19], [2] [20˜29], [3] [30˜39], [4] [40˜49], [5] [50˜59], [6] [60˜]
from
(select case when number_column >= 60 then 6 else cast(number_column/10 as int) end as decade
from original_table) as source_table
pivot (
count(decade) for decade in ([0],[1],[2],[3],[4],[5],[6])
) as pivot_table

感谢 Pieter Geerkens 和 Nizam 为我提供线索。

更新:
如果表格中还有其他未用于透视的列,则结果可能如下所示。

尼扎姆的第一个建议。

要解决这个问题,请参考 1. Nizam 的更新建议。 或者 2. 下面

【讨论】:

    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 2016-05-23
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多