创建临时表 #Test

CREATE TABLE #Test( ID INT, Name VARCHAR(50) )
INSERT INTO #Test( ID, Name ) VALUES ( 1, 'A' )
INSERT INTO #Test( ID, Name ) VALUES ( 2, 'A' )
INSERT INTO #Test( ID, Name ) VALUES ( 4, 'A' )
INSERT INTO #Test( ID, Name ) VALUES ( 5, 'B' )
INSERT INTO #Test( ID, Name ) VALUES ( 8, 'B' )
INSERT INTO #Test( ID, Name ) VALUES ( 10, 'B' )
INSERT INTO #Test( ID, Name ) VALUES ( 3, 'C' )
INSERT INTO #Test( ID, Name ) VALUES ( 6, 'D' )
INSERT INTO #Test( ID, Name ) VALUES ( 7, 'D' )
GO

删除/过滤 重复记录

-- (推荐) 将 #Test 中 name 重复的记录删除,只保留 ID 最小的记录
DELETE t1 FROM #Test t1 WHERE t1.ID > (SELECT MIN(ID) FROM #Test t2 WHERE t1.Name = t2.Name)

也可以用 ROW_NUMBER(),但是这个效果不行,而且难以理解

-- 使用 ROW_NUMBER() 过滤重复记录
SELECT *
FROM (SELECT ID, Name, ROW_NUMBER() OVER(PARTITION BY Name ORDER BY ID) row_index FROM #Test ) t
WHERE t.row_index = 1

  

行转列

SELECT r.userid
,STUFF((SELECT ',' + CONVERT(VARCHAR(12),DepartmentID) FROM tMemberDepartment WHERE userid = r.userid AND ISNULL(deleteflag,0)=0 FOR XML PATH('')) ,1,1,'') department
FROM dbo.tMember r

  

PIVOT  和 UNPIVOT 关键字

reference:勤奋的耕牛 的 SQL Server中行列转换 Pivot UnPivot

PIVOT 行转列

CREATE table #tb(姓名 varchar(10),课程 varchar(10),分数 int)
INSERT INTO #tb values('张三','语文',74)
INSERT INTO #tb values('张三','数学',83)
INSERT INTO #tb values('张三','物理',93)
INSERT INTO #tb values('李四','语文',74)
INSERT INTO #tb values('李四','数学',84)
INSERT INTO #tb values('李四','物理',94)
GO
//行转列
SELECT * FROM #tb PIVOT (MAX(分数) FOR 课程 IN (语文,数学,物理)) a

  

UNPIVOT 列转行

CREATE TABLE #tb2(姓名 varchar(10),语文 int,数学 int,物理 int)
INSERT INTO #tb2 values('张三',74,83,93)
INSERT INTO #tb2 values('李四',74,84,94)
GO
//列转行
SELECT 姓名,课程, SUM(分数) 分数
FROM #tb2
UNPIVOT (分数 FOR 课程 IN ([语文],[数学],[物理])) t

  

SQL Server 实用语句的更多相关文章

  1. 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

    如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何 ...

  2. SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条

    SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...

  3. SQL Server UPDATE语句的用法详解

    SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解. 现实应用 ...

  4. SQL Server中语句的自动参数化

    原文:SQL Server中语句的自动参数化 use master go if exists(select * from sys.databases where name = 'test') drop ...

  5. SQL server 常用语句

    SQL Server中常用的SQL语句   1.概述 2.查询概述 3.单表查询 4.连接查询 5.带有exists的相关子查询 6.SQL的集合操作 7.插入操作 8.删除操作 9.修改操作 10. ...

  6. sql server 基础语句

    创建数据库 创建之前判断该数据库是否存在 if exists (select * from sysdatabases where name='databaseName') drop database ...

  7. SQL Server Merge语句的使用

    Merge关键字在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插 ...

  8. SQL Server 脚本语句

    一.语法结构 select select_list [ into new_table ] from table_source [ where search_condition ] [ group by ...

  9. SQL Server 分页语句

      表中主键必须为标识列,[ID] int IDENTITY (1,1) 1.分页方案一:(利用Not In和SELECT TOP分页) SELECT TOP 页大小 * FROM TestTable ...

随机推荐

  1. 伦尼斯酒庄(Chateau Renice)再次赞助亚洲50大餐厅赛事

    连续几年来,伦尼斯酒庄(Chateau Renice)一直是亚洲50大最佳餐厅评选赛(Asia's 50 Best Restaurant Awards)的赞助商.2020年伦尼斯酒庄酒庄(Chatea ...

  2. 数据序列化工具——flatbuffer

    flatbuffer是一款类似于protobuf的数据序列化工具.所有数据序列化,简单来说,就是将某程数据结构按照一定的格式进行编码与解码,以方便在不同的进程间传递后,能够正确的还原成之前的数据结构. ...

  3. CentOS7安装ElasticSearch7.9.2

    1:下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar. ...

  4. oracle 查看 FK constraint referenced_table及columns

    select uc.table_name, uc.r_constraint_name, ucc.table_name, listagg(ucc.column_name, ',') within gro ...

  5. WPF绑定资源文件错误(error in binding resource string with a view in wpf)

    报错:无法将"***Properties.Resources.***"StaticExtension 值解析为枚举.静态字段或静态属性 解决办法:尝试右键单击在Visual Stu ...

  6. Docker 下Elasticsearch 的安装 和ik分词器

    (1)docker镜像下载 docker pull elasticsearch:5.6.8 (2)安装es容器 docker run -di --name=changgou_elasticsearch ...

  7. AQS源码解读(ReentrankLock的公平锁和非公平锁)

    构建Debug代码: 1 package com.hl.interview.lock; 2 3 import java.util.Scanner; 4 import java.util.concurr ...

  8. Java语言的魅力

    Java语言的简介 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面 ...

  9. 腾讯云容器服务 TKE 拿下新加坡 MTCS 最高级别安全认证

    近日,腾讯云容器服务 TKE 荣获新加坡 MTCS 最高级安全认证,标志着腾讯云 TKE 在为用户提供可靠.易部署.灵活扩展等基础服务上,已经全面满足了新加坡监管机构以及多个行业客户对服务安全的要求. ...

  10. Java 面向对象 03

    面向对象·三级 代码块的概述和分类 * A:代码块概述     * 在Java中,使用 { } 括起来的代码被称为代码块. * B:代码块分类     * 根据其位置和声明的不同,可以分为局部代码块, ...