यह मेरा कोड है:TSQL: COUNT (*) से अधिक (एक द्वारा आदेश)
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;
this page of BOL को, माइक्रोसॉफ्ट का कहना है कि: विभाजन से निर्दिष्ट नहीं है
हैं, फ़ंक्शन क्वेरी परिणाम के सभी पंक्तियों को एक समूह के रूप में सेट करता है।
तो मेरी समझ के आधार पर, अंतिम SELECT
कथन मुझे निम्नलिखित परिणाम देगा। चूंकि सभी रिकॉर्ड एक समूह में मानते हैं, है ना?
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 (*) ओवर (फ़ील्ड द्वारा ऑर्डर) बिल्कुल काम करता है ... – sgeddes
@bluefeet - यही मैंने सोचा - धन्यवाद ... – sgeddes
यह काम करता है एसक्यूएलसेवर 2012 - http://sqlfiddle.com/#!6/fe2f9/7 –