SQL Server 2008 R2——ROW_NUMBER() 去掉不同行中相同列的重复内容
2023-09-14 08:58:57 时间
USE tempdb GO -------------------------------------------------------------------------- IF OBJECT_ID('Student','U') IS NOT NULL DROP TABLE Student GO CREATE TABLE Student ( StuID NVARCHAR(8) PRIMARY KEY, Name NVARCHAR(5) ) GO INSERT INTO Student(StuID,Name) VALUES('20080001','Lily') INSERT INTO Student(StuID,Name) VALUES('20080002','Lucy') INSERT INTO Student(StuID,Name) VALUES('20080003','Jack') GO -------------------------------------------------------------------------- IF OBJECT_ID('SltCourse','U') IS NOT NULL DROP TABLE SltCourse GO CREATE TABLE SltCourse --SelectiveCourse ( ID INT PRIMARY KEY IDENTITY(1,1), StuID NVARCHAR(8), CourseName NVARCHAR(10), Score INT ) GO INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080003','电脑维修',90) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080003','剪纸',80) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080003','市场策划',95) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080003','信息检索',100) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080001','插花',99) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080001','剪纸',96) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080001','刺绣',92) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080002','插花',98) GO -------------------------------------------------------------------------- SELECT * FROM Student GO SELECT * FROM SltCourse GO -------------------------------------------------------------------------- SELECT * FROM Student s,SltCourse sc WHERE s.stuid=sc.stuid GO -------------------------------------------------------------------------- WITH ReportCard AS( SELECT s.StuID,s.Name,sc.CourseName,sc.Score FROM Student s,SltCourse sc WHERE s.stuid=sc.stuid ) SELECT CASE WHEN RowNum=1 THEN StuID ELSE '' END AS ID, CASE WHEN RowNum=1 THEN Name ELSE '' END AS Name, CourseName, Score FROM (SELECT *,ROW_NUMBER() OVER (PARTITION BY StuID,Name ORDER BY Score) AS RowNum FROM ReportCard) TBL GO -------------------------------------------------------------------------- DROP TABLE Student GO DROP TABLE SltCourse GO
USE tempdb GO -------------------------------------------------------------------------- IF OBJECT_ID('Student','U') IS NOT NULL DROP TABLE Student GO CREATE TABLE Student ( StuID NVARCHAR(8) PRIMARY KEY, Name NVARCHAR(5), EntranceTime DATETIME ) GO INSERT INTO Student(StuID,Name,EntranceTime) VALUES('20080001','Lily','2008-08-27') INSERT INTO Student(StuID,Name,EntranceTime) VALUES('20090002','Lucy','2009-08-26') INSERT INTO Student(StuID,Name,EntranceTime) VALUES('20070003','Jack','2007-08-28') GO -------------------------------------------------------------------------- IF OBJECT_ID('SltCourse','U') IS NOT NULL DROP TABLE SltCourse GO CREATE TABLE SltCourse --SelectiveCourse ( ID INT PRIMARY KEY IDENTITY(1,1), StuID NVARCHAR(8), CourseName NVARCHAR(10), Score INT ) GO INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20070003','电脑维修',90) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20070003','剪纸',80) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20070003','市场策划',95) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20070003','信息检索',100) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080001','插花',99) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080001','剪纸',96) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20080001','刺绣',92) INSERT INTO SltCourse(StuID,CourseName,Score) VALUES('20090002','插花',98) GO -------------------------------------------------------------------------- SELECT * FROM Student GO SELECT * FROM SltCourse GO -------------------------------------------------------------------------- SELECT * FROM Student s,SltCourse sc WHERE s.stuid=sc.stuid GO -------------------------------------------------------------------------- WITH ReportCard AS( SELECT s.StuID,s.Name,s.EntranceTime,sc.CourseName,sc.Score FROM Student s,SltCourse sc WHERE s.stuid=sc.stuid ) SELECT CASE WHEN RowNum=1 THEN StuID ELSE '' END AS ID, CASE WHEN RowNum=1 THEN Name ELSE '' END AS Name, CASE WHEN RowNum=1 THEN EntranceTime ELSE '' END AS EntranceTime, CourseName, Score FROM (SELECT *,ROW_NUMBER() OVER (PARTITION BY StuID,Name,EntranceTime ORDER BY Score) AS RowNum FROM ReportCard) TBL GO -------------------------------------------------------------------------- DROP TABLE Student GO DROP TABLE SltCourse GO
WITH ReportCard AS( SELECT s.StuID,s.Name,s.EntranceTime,sc.CourseName,sc.Score FROM Student s,SltCourse sc WHERE s.stuid=sc.stuid ) SELECT CASE WHEN RowNum=1 THEN StuID ELSE '' END AS ID, CASE WHEN RowNum=1 THEN Name ELSE '' END AS Name, CASE WHEN RowNum=1 THEN EntranceTime ELSE cast(nullif('','') as datetime) END AS EntranceTime, CourseName, Score FROM (SELECT *,ROW_NUMBER() OVER (PARTITION BY StuID,Name,EntranceTime ORDER BY Score) AS RowNum FROM ReportCard) TBL GO
相关文章
- T-SQL教程_sql server 2008使用
- sql server 备份还原_什么是SQL
- 怎样在SQL Server数据库执行sql脚本?
- SQL手工注入漏洞测试(Sql Server数据库)
- 人工智能自动sql优化工具–SQLTuning for SQL Server
- SQL SERVER 分组求和sql语句
- 轻松掌握:使用SQL Server执行SQL脚本(sqlserver执行sql脚本)
- 产品使用SQL Server免费产品,提升数据处理能力(sqlserver免费)
- SQL Server面试官细致考察,求职者奋发进取!(sqlserver面试官)
- SQL Server:挑战又是机遇?(sqlserver难不难)
- SQL Server中处理长文本字段的技巧(sqlserver长字段)
- 数据使用SQL Server实现数据追加(sqlserver 追加)
- SQL Server超级卡:提升数据库性能的完美解决方案(sqlserver超级卡)
- SQL Server表的还原恢复之道(sqlserver表还原)
- 查询SQL Server表锁情况的简单方法(sqlserver查表锁)
- SQL Server的圣经(sqlserver 圣经)
- SQL Server快速高效地回档,实现数据备份(sqlserver回档)
- 截取SQL Server中子串的截取技巧(sqlserver中子串)
- SQL与MySQL的异同——引起关注的相似之处(sql和mysql的区别)
- serverMySQL 与 SQL Server 的比较与选择(mysql 和 sql)
- Sql学习第一天——SQL练习题(建表/sql语句)