递归

with myRecursion as(

select * from recursion where id=1

union all select r.* from myRecursion m,recursion r where m.id=r.pid

)

select * from myRecursion

Ps:union all 不去重求并集

很多地方都用到了递归,比如asp.net mvc里的模型绑定就是递归绑定的,还比如树状菜单

排名

下表是一个销售业绩表,我对销售业绩做一个排名,显示出排名结果

SELECT a1.Name, a1.Sales, COUNT(a2.sales) Sales_Rank

FROM ranking  a1, ranking  a2

WHERE a1.Sales < a2.Sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)

GROUP BY a1.Name, a1.Sales

ORDER BY a1.Sales DESC, a1.Name DESC;

结果:

重点是自己和自己比较,找出a1的Sales小于a2的Sales的数据 或者Name和Sales都相等的数据(a1里的全部数据去对比a2里的每一个数据)

未分组的结果:

SELECT a1.Name, a1.Sales, a2.sales Sales_Rank

FROM ranking  a1, ranking  a2

WHERE a1.Sales < a2.Sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)

结果如图,结果一目了然。只要分组count一下就是排名了。

其实还有一个问题就是有并列排名,比如上图中有个并列第3的,第四名就不存在了。

这些都可根据具体的规则用程序去调整,嘻嘻

去重

有时我们会遇到一些表里有些重复的数据,如图:

第一种,去除全部重复的数据除id以外

declare @t1 table(id int,name nchar(10),Text nchar(10))

insert into @t1(Name,Text)(select distinct Name,Text from mydistinct1)

delete from mydistinct1

insert into mydistinct1(name,text)(select name,text from @t1)

Ps:@t 定义一个虚拟表,向虚拟表里插入用distinct去重的数据,清空原表,再把虚拟表里的数据插入到原表。

第二种,去除指定列重复的数据。

delete from mydistinct where id not in(select MIN(id) from mydistinct group by name)

Ps:sql很简单,分组后取分组里一个id,这里取最小的一个,删除除此之外的id

行转列

select 姓名 as 姓名 ,

max(case 课程 when '语文' then 分数 else 0 end) 语文,

max(case 课程 when '数学' then 分数 else 0 end) 数学,

max(case 课程 when '物理' then 分数 else 0 end) 物理

from tb

group by 姓名

结果如图:

Ps:一目了然就不多解释了

For xml path 现实分组后指定列的全部数据

数据表:

For xml path 结果如下:

select * from forxmlpath for XML path('')

分组结果:

select name,min(text) from forxmlpath group by name

分组后除此分组列,其他列要显示就要使用聚合函数,只能显示结果中的一个或数量或合计

我们可以利用for xml path的特性把全部数据都显示在一列中,并指定显示格式

逗号间隔:

select text+',' from forxmlpath for xml path('')

逗号间隔显示分组后非分组列:

select name,(select text+',' from forxmlpath where a.name=name for XML path(''))

from forxmlpath a group by name

去掉结尾的逗号:

使用 left函数截取

select name,LEFT(text,LEN(text)-1)text

from(select name,(select text+',' from forxmlpath where a.name=name for XML path('')) text

from forxmlpath a group by name)t

这辈子写过的比较有意思的几个sql的更多相关文章

  1. 自己写一个java.lang.reflect.Proxy代理的实现

    前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Pr ...

  2. 我发起了一个 用 C# 写 的 浏览器 开源项目 HtmlCore

    我之前还发起过一个 项目, 名字也叫 HtmlCore, 见 <我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore>  https://www.cnblo ...

  3. 跟我一起写一个chrome扩展程序

    在我没有看这本书之前,我都想象不到,原来chrome扩展程序可以这样写,真的非常有意思. 就是用最简单最基础的代码,然后就实现了一些非常有意思的玩意儿. 先看效果图 实际运用要和现实联系在一起,经历和 ...

  4. 牛逼哄哄的PageHelper分页插件到底是怎么实现的?网友:给我10分钟,给你写一个~

    Hi,各位读者们 PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美. ...

  5. 如何写复杂的SQL

    经常有人问我那非常复杂的sql是怎么写出来的,我一直不知道该怎么回答.         因为虽然我写这样的sql很顺手,可是我却不知道怎么告诉别人怎么写. 很多人将这个问题归结为天赋,我却不这么看,我 ...

  6. 将复杂查询写到SQL配置文件--SOD框架的SQL-MAP技术简介

    引言 今天看到一片热门的博客, .NET高级工程师面试题之SQL篇 ,要求找出每一个系的最高分,并且按系编号,学生编号升序排列.这个查询比较复杂,也比较典型,自从用了ORM后,很久没有写过SQL语句了 ...

  7. 转 一篇关于sql server 三种恢复模式的文章,从sql server 的机制上来写的,感觉很不错,转了

    简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...

  8. 写java代码遇到的一些问题

    记录一些做论文实验写代码时遇到的问题. 数据库SQL语句方面: 1.java通过JDBC连接MySql数据库方法 参见:http://hzy3774.iteye.com/blog/1689525 2. ...

  9. 大数据不就是写SQL吗?

    应届生小祖参加了个需求分析会回来后跟我说被产品怼了一句: "不就是写SQL吗,要那么久吗" 我去,欺负我小弟,这我肯定不能忍呀,于是我写了一篇文章发在了公司的wiki 贴出来给大家 ...

随机推荐

  1. HDU 1212 大整数的取模运算

    因为这里是MOD最大为100000 所以我将字符串看作5个一组,并记录后面跟了多少个100000 每次取5个数根据其数据进行取模更新 注意过程中 100000*100000会超int #include ...

  2. noip模拟赛 dwarf tower

    [问题描述]Vasya在玩一个叫做"Dwarf Tower"的游戏,这个游戏中有n个不同的物品,它们的编号为1到n.现在Vasya想得到编号为1的物品.获得一个物品有两种方式:1. ...

  3. noip模拟赛 小Y的问题

    [问题描述]有个孩子叫小 Y,一天,小 Y 拿到了一个包含 n 个点和 n-1 条边的无向连通图, 图中的点用 1~n 的整数编号.小 Y 突发奇想,想要数出图中有多少个“Y 字形”.一个“Y 字形” ...

  4. Linux下汇编语言学习笔记75 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  5. Asp.Net页面生命周期[转]

    一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  完全识别 HTTP 页 ...

  6. 基于.NET平台常用的框架整理(转)

    基于.NET平台常用的框架整理   分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问 ...

  7. mysql Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’

    mysql Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ 今天在linux中安装了mys ...

  8. Hadoop 究竟能做什么?

    http://hi.baidu.com/jiuxiaoyao/item/ff0a19e5b09a953a87d9def3 现在好像大家都在讲 大数据 云计算 hadopp .那么hadoop究竟能做些 ...

  9. 今天開始慢下脚步,開始ios技术知识的查漏补缺。

    从2014.6.30 開始工作算起. 如今已经是第416天了.不止不觉.时间过的真快. 通过对之前工作的总结.发现,你的知识面.会决定你面对问题时的态度.过程和结果. 简单来讲.知识面拓展了,你才干有 ...

  10. Linux声卡驱动移植和測试

    一.分析驱动程序,依据开发板改动代码 代码太长,就不贴了,几个注意点: 1. 查看开发板原理图和S3C2410的datasheet,UDA1341的L3MODE.L3DATA.L3CLOCK分别与S3 ...