3

SQL Server 2000を使用してこれを行うためのより簡単でクリーンな方法はありますか?

数日ごとにこれを行う必要があります。

まず、合計でいくつのレコードがあるかを確認します。

SELECT COUNT(*) FROM MyTable

次に、特定のフィールドのすべての長さをリストします。

SELECT LEN(MyText)
FROM MyTable
ORDER BY LEN(MyText) ASC

次に、1/3まで下にスクロールして、値をメモする必要があります。次に、3分の2まで下にスクロールして、値をメモする必要があります。そして最後に最後の値。

x、y、zを見つける必要があります:

 33% of the records have this field with a length under x bytes
 66% of the records have this field with a length under y bytes
100% of the records have this field with a length under z bytes
4

2 に答える 2

3

SQL 2005 では、おそらくランキング関数を使用できます。SQL 2000 では、このようなことをしていると思います。

DECLARE @RC INT 

CREATE TABLE #lengths
(
id INT IDENTITY(1,1),
[length] INT
)

INSERT INTO #lengths
SELECT LEN(MyText)
FROM MyTable
ORDER BY LEN(MyText) ASC


SET @rc= @@ROWCOUNT

SELECT [length] 
FROM #lengths 
WHERE id IN 
(@rc/3, (2*@rc)/3, @rc)
于 2010-08-23T20:07:02.027 に答える
0

次のようなものが必要だと思います:

SELECT
 x1.l AS Length,
 x1.n      * 1e2 / (SELECT COUNT(*) FROM MyTable) AS [Percent],
 SUM(x2.n) * 1e2 / (SELECT COUNT(*) FROM MyTable) AS CumPercent
FROM (
 SELECT LEN(MyText) AS l, COUNT(*) AS n
 FROM MyTable
 GROUP BY LEN(MyText)
) AS x1
LEFT JOIN (
 SELECT LEN(MyText) AS l, COUNT(*) AS n
 FROM MyTable
 GROUP BY LEN(MyText)
) AS x2
 ON x2.l <= x1.l
GROUP BY x1.l, x1.n
ORDER BY x1.l
于 2010-08-23T20:27:00.277 に答える