【发布时间】:2013-04-29 20:17:24
【问题描述】:
我有一个不寻常的情况。请考虑以下代码:
IF OBJECT_ID('tempdb..#CharacterTest') IS NOT NULL
DROP TABLE #CharacterTest
CREATE TABLE #CharacterTest
(
[ID] int IDENTITY(1, 1) NOT NULL,
[CharField] varchar(50) NULL
)
INSERT INTO #CharacterTest (CharField)
VALUES ('A')
, ('A')
, ('A')
, ('A')
, ('B')
, ('B')
, ('B')
, ('C')
, ('C')
, ('D')
, ('D')
, ('F')
, ('G')
, ('H')
, ('I')
, ('J')
, ('K')
, ('L')
, ('M')
, ('N')
, (' ')
, (' ')
, (' ')
, (NULL)
, ('');
我想要一个查询,它给我一个这样的字符串: A (16%), B (12%), C(8%)
请注意以下几点:
- 我不希望在前 3 名中列出空字符串、全为空格的字符串或空值,但我确实希望使用表的整个记录计数来计算值的百分比。
- 可以忽略平局,因此如果列表中有 22 个频率为 8% 的值,则可以简单地返回第一个出现的值。
- 百分比可以四舍五入为整数。
我想找到编写此查询的最简单方法,同时仍保持与 SQL Server 2005 的 T-SQL 兼容性。最好的方法是什么?窗口函数?
【问题讨论】:
标签: tsql sql-server-2005 window-functions