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