开窗函数

CREATE TABLE #T_Person   
(  
    FName VARCHAR(20),  
    FCity VARCHAR(20),   
    FAge INT,  
    FSalary INT  
) 


INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Tom','BeiJing',20,3000);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Tim','ChengDu',21,4000);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Jim','BeiJing',22,3500);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Lily','London',21,2000);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('John','NewYork',22,1000);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('YaoMing','BeiJing',20,3000);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Swing','London',22,2000);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Guo','NewYork',20,2800);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('YuQian','BeiJing',24,8000);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Ketty','London',25,8500);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Kitty','ChengDu',25,3000);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Merry','BeiJing',23,3500);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Smith','ChengDu',30,3000);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)  
VALUES('Bill','BeiJing',25,2000);   
INSERT INTO #T_Person(FName,FCity,FAge,FSalary)   
VALUES('Jerry','NewYork',24,3300); 



SELECT   count(*) FROM #T_Person

/*
    查询每个工资小于 5000元的员工信息(城市以及年龄) ,并且在
    每行中都显示所有工资小于5000元的员工个数
*/
WITH tempCity AS
(
    SELECT a.*
    FROM  #T_Person a
    WHERE FSalary<5000
)

SELECT a.FCITY , a.FAGE, COUNT(*) CountGroup, (SELECT COUNT(*) FROM tempCity ) CountTotal
FROM #T_Person a
INNER JOIN tempCity b ON b.FCity=a.FCity  AND b.FName=a.FName AND b.FAge=a.FAge
GROUP BY a.FCity, a.FAge


SELECT * FROM  #T_Person ORDER BY FCity, FSalary 

/*
    查询每个工资小于 5000元的员工信息(城市以及年龄) ,并且在
    每行中都显示所有工资小于5000元的员工个数
*/

SELECT FCITY , FAGE ,   COUNT(*) CountGroup,
( 
  SELECT COUNT(* ) FROM #T_Person 
  WHERE FSALARY<5000 
) CountTotal
FROM #T_Person 
WHERE FSALARY<5000
GROUP BY FCITY , FAGE


/*
    使用开窗函数
*/

SELECT FCity, FAge, COUNT(*) OVER() 
FROM  #T_Person
WHERE FSalary<5000
ORDER BY FCity, FAge


/*
    使用开窗函数
*/

SELECT FCity, FAge, COUNT(*) OVER(PARTITION BY FCity) 
FROM  #T_Person
WHERE FSalary<5000
ORDER BY FCity, FAge
原文地址:https://www.cnblogs.com/intheway/p/8746110.html