0

在一个应用程序中,我有一个包含三个字段的表,即 Id、Name 和 count。

Id  |  Name  |  Value
1   |    A   |     5
2   |    B   |     9       
3   |    C   |     9
4   |    D   |     5
5   |    E   |     6
6   |    F   |     6

现在,我怎样才能从上面获得一个交叉表?我的意思是,如下:

Value | Count
----  | ----
5     |    2
6     |    2
7     |    0
8     |    0
9     |    2

你能帮忙吗?

4

1 回答 1

1

首先,您需要创建一个计数表。有很多方法。您将使用计数表对源表的最小值和最大值之间的所有值进行编号。一旦获得了最小值和最大值之间的所有数字,您将需要将LEFT JOIN这些数字放入您使用的表格版本中,COUNT()GROUP BY计算每个值出现的次数。

表 A 下方是计数表。表 B 是您的聚合源表。

DECLARE @MinValue INT 
DECLARE @MaxValue INT
SET @MinValue = (SELECT MIN(Value) FROM dbo.MyTable)
SET @MaxValue = (SELECT MAX(Value) FROM dbo.MyTable)

SELECT number as Value, COALESCE(Count,0) AS Count
FROM (
    SELECT DISTINCT number
    FROM master..spt_values
    WHERE number
    BETWEEN @MinValue AND @MaxValue
) AS A
LEFT JOIN (
    SELECT Value, COUNT(Value) AS Count
    FROM dbo.MyTable
    GROUP BY Value
) AS B
ON A.number = B.value
于 2017-05-13T02:37:32.177 回答