创建临时表 #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. 炒币亏损一万美金?不如抢SPC空投!

    币圈的市场可以用风云变幻来形容,1月9日的时候比特币震荡,其他币种争先上涨,连平时都不涨的币种都拉出了10%-20%的领先涨幅,市场惊呼牛市来了,但喜悦还没有维持一天,1月10日(昨天)市场就走向另一 ...

  2. 【python接口自动化】- 对接各大数据库

    相信很多小伙伴在使用python进行自动化测试的时候,都会涉及到数据库数据校验的问题,在前面的随笔中就已经有讲过连接mysql的使用,今天给大家汇总一下python对接几大常用的数据库操作的方法!众所 ...

  3. 使用 Tye 辅助开发 k8s 应用竟如此简单(三)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何对数据库进行链接. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...

  4. Linux 内核和 Windows 内核有什么区别?

    Windows 和 Linux 可以说是我们比较常见的两款操作系统的. Windows 基本占领了电脑时代的市场,商业上取得了很大成就,但是它并不开源,所以要想接触源码得加入 Windows 的开发团 ...

  5. Spring Boot移除内嵌Tomcat,使用非web方式启动

    前言:当我们使用Spring Boot编写了一个批处理应用程序,该程序只是用于后台跑批数据,此时不需要内嵌的tomcat,简化启动方式使用非web方式启动项目,步骤如下: 1.在pom.xml文件中去 ...

  6. Docker 搭建nexus私服

    一.概述 有三种专门的Maven仓库管理软件可以用来帮助大家建立私服:Apache基金会的Archiva.JFrog的Artifactory和Sonatype的Nexus.而Nexus是当前最流行的M ...

  7. 项目管理之Git

    @[TOC]( Git命令:分支与合并)Git一款很好的项目版本管理工具,更是一款优秀的分布式项目管理工具.今天主要给大家介绍Git 强大的分支和合并功能,分支和合并可以说在实际的工作当中用到的是最多 ...

  8. Linux ctrl+z挂起的进程恢复与杀死

    Linux系统下,不小心按了ctrl+z命令后,退出了当前进程的执行界面,程序没有结束,只是被挂起了.通过ps命令可以查看进程信息,这里不做详细介绍,可通过jobs命令查看被挂起的进程号 #jobs ...

  9. MyBatis文档

    MyBatis 学习笔记 简介 什么是Mybatis MyBatis 是一款优秀的持久层框架,是Apache的一个Java开源项目 ,它支持自定义 SQL.存储过程以及高级映射, 免除了几乎所有的 J ...

  10. JAVA_标识符、数据类型、变量

    标识符和关键字 ​ 所有的标识符否应该以字母a ~ z和 A ~Z ,美元符($).下划线(_)开始. ​ 首字符之后可以是字母a ~ z和 A ~Z ,美元符($).下划线(_)的任意字符组合. 注 ...