私には異常な状況があります。次のコードを検討してください。
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%) のような文字列を返すクエリが欲しいです。
次の点に注意してください。
- 空の文字列、すべてが空白の文字列、または NULL が上位 3 にリストされるのは望ましくありませんが、テーブルのレコード数全体を使用して計算された値のパーセンテージが必要です。
- 同点は無視できるので、リストに 22 個の値があり、頻度が 8% の場合は、最初の値を返すだけで問題ありません。
- パーセンテージは整数に丸めることができます。
T-SQL との互換性を維持しながら、SQL Server 2005 との互換性を維持しながら、このクエリを作成する最も簡単な方法を見つけたいと思います。これを行う最善の方法は何ですか? ウィンドウ関数?