2010-08-23 51 views
3

使用SQL Server 2000有更簡單/更簡潔的方法嗎?SQL Server 2000:在記錄的1/3(或2/3)中的字段長度

每隔幾天我需要這樣做。

我先來看看我們有多少條記錄共有:

SELECT COUNT(*) FROM MyTable 

然後我列出某一領域的所有長度:

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

然後我需要向下滾動的1/3方式...並注意價值。 然後我需要向下滾動方式的2/3 ...並記下值。 然後最後是最後一個值。

我需要找出的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 
+0

你有沒有休息標識列?如果你這樣做(或者可以加一個),那麼得到總數併除以3。 – ScottE 2010-08-23 20:03:45

回答

3

在2005年SQL你很可能排名功能這一點。在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) 
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