COUNT ohne GROUP BY Klausel Problem

Ich vermisse hier wohl etwas einfaches. Ich habe diesen ersten Tisch:

CREATE TABLE [Orgnzs] ( [id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY, [nm] NVARCHAR(256) ); 

und dann auch mehrere Tische, die alle als solche erstellt werden (alle haben die gleiche Struktur):

 -- WLog_* tables are all created as such CREATE TABLE [WLog_1] ( [id] BIGINT NOT NULL IDENTITY(1,1) PRIMARY KEY, [huid] UNIQUEIDENTIFIER, [dtin] BIGINT, [dtout] BIGINT, [cnm] NVARCHAR(15), [batt] TINYINT, [pwrop] TINYINT, [pst] INT, [flgs] INT, [ppocs] NVARCHAR(1024), [ppocu] NVARCHAR(1024), [por] NVARCHAR(1024) ); 

und ein ähnlicher Satz von Tabellen, ohne letzte 3 Spalten der Tabelle oben:

 -- ULog_* tables are all created as such CREATE TABLE [ULog_1] ( [id] BIGINT NOT NULL IDENTITY(1,1) PRIMARY KEY, [huid] UNIQUEIDENTIFIER, [dtin] BIGINT, [dtout] BIGINT, [cnm] NVARCHAR(15), [batt] TINYINT, [pwrop] TINYINT, [pst] INT, [flgs] INT ); 

Mein Ziel ist es, datasätze aus beliebigen Satz von WLog_ * und ULog_ * Tabellen auszuwählen und sie durch eine überschaubare Anzahl von Elementen (für Seitenlayout) zu begrenzen, für die ich auch die Gesamtzahl der gefundenen datasätze kennen muss.

Also sehe ich die Auswahl als solche:

 SELECT b.[id] AS evtID, b.[huid] as huid, b.[dtin] as dtin, b.[dtout] as dtout, b.[cnm] as cnm, b.[batt] as batt, b.[pwrop] as pwrop, b.[pst] as pst, b.[flgs] as flgs, b.[ppocs] as ppocs, b.[ppocu] as ppocu, b.[por] as por, b.[orgID] as orgID, b.[wLg] as wLg, orgz.[nm] as orgNm , COUNT_BIG(*) as allRecordsFound FROM ( -- next also specify the column(s) to sort by SELECT *, ROW_NUMBER() OVER (ORDER BY [dtin], [cnm] ASC) AS rw FROM ( SELECT *, 1 AS orgID, 1 AS wLg FROM [WLog_1] UNION ALL SELECT *, 2 AS orgID, 1 AS wLg FROM [WLog_2] UNION ALL SELECT *, NULL AS [ppocs], NULL AS [ppocu], NULL AS [por], 1 AS orgID, 0 AS wLg FROM [ULog_1] ) a WHERE [pst]&1=1 OR [pst]=67 ) b LEFT JOIN [Orgnzs] AS orgz ON orgID=orgz.[id] WHERE rw >= 2 AND rw <= 4 -- restrict for a page only 

die leider auf dem COUNT_BIG(*) as allRecordsFound Zeile mit dem folgenden Fehler COUNT_BIG(*) as allRecordsFound :

Die Spalte 'b.id' ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.

Ich habe SQL server seit einer Weile nicht benutzt, kann jemand vorschlagen, was fehlt mir hier?

PS Für einen Testzweck habe ich eine Geige gemacht , um es auszuprobieren.

Verwenden Sie stattdessen:

 count(*) over() as allRecordsFound 

Sie können die windowsaggregationsfunktion in der select-statement ohne Gruppierung mischen.