如何在sql查询中获取列表

时间:2017-05-12 23:25:33

标签: sql count outsystems

在一个应用程序中,我有一个包含三个字段的表,即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
你可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

首先,您需要创建一个计数表。这有many methods。您将使用计数表对源表的最小值和最大值之间的所有值进行编号。获得最小值和最大值之间的所有数字后,您需要将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