CREATE TABLE Temp
(
ID Int IDENTITY,
Name Varchar(100)
)
INSERT INTO Temp
SELECT 'Elby'
UNION ALL
SELECT 'Eljo'
UNION ALL
SELECT 'Elsy'
UNION ALL
SELECT 'Elsy'
UNION ALL
SELECT 'Eljo'
UNION ALL
SELECT 'Elsy'
UNION ALL
SELECT 'Elsy'
Run Code Online (Sandbox Code Playgroud)
我要求的输出是..
----------------------------------------
TotalRecordCount ID Name
----------------------------------------
7 5 Elby
7 6 Eljo
7 7 Elsy
7 8 Elsy
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
我的查询是...
SELECT TotalRecordCount,
ID,
Name
FROM (
SELECT *
FROM Temp
) Tab1
WHERE ID > 4
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何找到“ TotalRecordCount”字段的值。它是表“ Temp”的总数。
我不能使用像' SELECT COUNT(*) FROM Temp AS TotalRecordCount'这样的查询,因为它不是单个表。
就像(SELECT * FROM Table1 JOIN TABLE2 ON (Table1.ID = Table2.ID) JOIN TABLE3 ON (TABLE2.ID = TABLE3.ID) JOIN TABLE4 ON (TABLE3.ID = TABLE4.ID).....)
为了您的理解,我使用了'temp'而不是整个查询。
您可以使用CTE和窗口函数来执行此操作,以避免对表进行第二次扫描:
WITH Counts AS(
SELECT ID,
[Name],
COUNT(*) OVER () AS TotalRows
FROM dbo.Temp)
SELECT TotalRows,
ID,
[Name]
FROM Counts
WHERE ID > 4;
Run Code Online (Sandbox Code Playgroud)