これが私のコードです:this page of BOLにTSQL:COUNT(*)OVER(ORDER BY句)が
USE [tempdb];
GO
IF OBJECT_ID(N'dbo.t') IS NOT NULL
BEGIN
DROP TABLE dbo.t
END
GO
CREATE TABLE dbo.t
(
a NVARCHAR(8),
b NVARCHAR(8)
);
GO
INSERT t VALUES ('a', 'b');
INSERT t VALUES ('a', 'b');
INSERT t VALUES ('a', 'b');
INSERT t VALUES ('c', 'd');
INSERT t VALUES ('c', 'd');
INSERT t VALUES ('c', 'd');
INSERT t VALUES ('c', 'd');
INSERT t VALUES ('e', NULL);
INSERT t VALUES (NULL, NULL);
INSERT t VALUES (NULL, NULL);
INSERT t VALUES (NULL, NULL);
INSERT t VALUES (NULL, NULL);
GO
SELECT a, b,
COUNT(*) OVER (ORDER BY a)
FROM t;
、Microsoftは述べている:PARTITIONのBYが指定されていない
場合は、関数は、クエリ結果セットのすべての行を単一のグループとして扱います。
私の理解に基づいて、最後のSELECT
ステートメントは私に次の結果を与えます。すべてのレコードは1つのグループであるとみなされますから、そうですか?
a b
-------- -------- -----------
NULL NULL 12
NULL NULL 12
NULL NULL 12
NULL NULL 12
a b 12
a b 12
a b 12
c d 12
c d 12
c d 12
c d 12
e NULL 12
しかし、実際の結果は次のとおりです。
a b
-------- -------- -----------
NULL NULL 4
NULL NULL 4
NULL NULL 4
NULL NULL 4
a b 7
a b 7
a b 7
c d 11
c d 11
c d 11
c d 11
e NULL 12
誰もが理由を説明するのに役立つことができますか?ありがとう。
私は間違っているかもしれませんが、COUNT(*)OVER(ORDER BYフィールド)はまったく動作しないと思います... – sgeddes
@bluefeet - これは私が思ったことです - ありがとう... – sgeddes
SQLServer 2012 - http://sqlfiddle.com/#!6/fe2f9/7を参照してください。 –