非典型T_SQL的总结
------over的两种常用的用法---
--第一种分组 当然要注意了,这里的分组并不是实际的分组,而是根据你的业务需求而坐的临时分组
select
roomguid,Room,
avg(total) over(partition by bldGUID) as 楼栋均价,
AVG(total) over(partition by ProjGUID) as 项目均价
from p_room
--产生行号 用来产生行号的时候,over()一定要order by
select
ROW_NUMBER() over(order by roomguid) as rownum
from p_room
------apply 用法比cross join 更加灵活些
当然apply也是一种表连接join 的用法 ,不过在形式上更加灵活些,他可以不用连接一张完整的表,可以是表的某个字段都行
注意末尾必须要有表的别名,即使别名用不到
cross apply (select 课程,分数 from #T2 where 姓名 =a.姓名) b
--测试代码:
create table #T(姓名 varchar(10))
insert into #T values('张三')
insert into #T values('李四')
insert into #T values(NULL )
create table #T2(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into #T2 values('张三' , '语文' , 74)
insert into #T2 values('张三' , '数学' , 83)
insert into #T2 values('张三' , '物理' , 93)
insert into #T2 values(NULL , '数学' , 50)
---cross apply ---注意末尾必须要有表的别名
select * from #T as a
cross apply (select 课程,分数 from #T2 where 姓名 =a.姓名) b
---outer apply
select * from #T as a
outer apply (select 课程,分数 from #T2 where 姓名 =a.姓名) b
-----with 实现递归
with test
as
(
select UserGUID from MyUser group by UserGUID order by UserGUID
)
select * from test
---以上是一个with用法非常简单的示例,此时你可以将test看成一张临时表,然后再查询使用
--1、如果CTE的表达式名称与某个数据表或视图重名,则紧跟在该CTE后面的SQL语句使用的仍然是CTE,当然,后面的SQL语句使用的就是数据表或视图了
--2、使用with要注意的地方:
--3、 不能在 CTE_query_definition 中使用以下子句:
--(1)COMPUTE 或 COMPUTE BY
--(2)ORDER BY(除非指定了 TOP 子句)
--(3)INTO
--(4)带有查询提示的递归成员中不允许出现下列项
--SELECT DISTINCT
-- GROUP BY
--HAVING
--标量聚合
--TOP
-- LEFT、RIGHT、OUTER JOIN(允许出现 INNER JOIN)
-- 子查询 OPTION 子句
--(5)FOR XML
--(6)FOR BROWSE
---4、但with一般是用于实现递归的,如果你想实现递归,那么就必须用union all,其实用cte实现递归查询是比较死的东西 OPTION(MAXRECURSION 1) -- OPTION(MAXRECURSION 1)控制递归的层级数
WITH myClass
AS
( ----首先我要根据条件拿到我的根节点
SELECT ClassFullCode,ClassFullName, 1 as level
FROM s_class
WHERE ParentCode = '' or ParentCode is null
UNION all
---根据条件循环遍历 cls.PraentCode = my.ClassFullCode 这就是遍历的条件
SELECT cls.ClassFullCode,cls.ClassFullName,level + 1
FROM s_Class cls join myClass my ON cls.ParentCode = my.ClassFullCode
)
SELECT ClassFullCode,ClassFullName,level FROM myClass
OPTION(MAXRECURSION 1) --error 控制递归的层级数
----pivot的用法
SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]--这里是PIVOT第三步(选择行转列后的结果集的列)这里可以用"*"表示选择所有列,也可以只选择某些列(也就是某些天)
--FROM WEEK_INCOME --这里是PIVOT第二步骤(准备原始的查询结果,因为PIVOT是对一个原始的查询结果集进行转换操作,所以先查询一个结果集出来)这里可以是一个select子查询,但为子查询时候要指定别名,否则语法错误
--PIVOT
--(
-- SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])--这里是PIVOT第一步骤,也是核心的地方,进行行转列操作。聚合函数SUM表示你需要怎样处理转换后的列的值,是总和(sum),还是平均(avg)还是min,max等等。例如如果week_income表中有两条数据并且其week都是"星期一",其中一条的income是1000,另一条income是500,那么在这里使用sum,行转列后"星期一"这个列的值当然是1500了。后面的for [week] in([星期一],[星期二]...)中 for [week]就是说将week列的值分别转换成一个个列,也就是"以值变列"。但是需要转换成列的值有可能有很多,我们只想取其中几个值转换成列,那么怎样取呢?就是在in里面了,比如我此刻只想看工作日的收入,在in里面就只写"星期一"至"星期五"(注意,in里面是原来week列的值,"以值变列")。总的来说,SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])这句的意思如果直译出来,就是说:将列[week]值为"星期一","星期二","星期三","星期四","星期五","星期六","星期日"分别转换成列,这些列的值取income的总和。
--)TBL--别名一定要写
--update 更新方式的总结
create table music
(
id int identity(1,1),
school varchar(200),
name varchar(100)
)
insert into music values('湖北大学','陈宏业')
insert into music values('湖北大学','陈哲'),('湖北大学','吕俊'),('湖北大学','唐虎笑'),('湖北大学','何文奇')
insert into music values('武汉科技大学','徐乐乐'),('湖北大学','王红'),('湖北大学','陈磊'),('湖北大学','魏德洲')
create table music3
(
id int ,
school varchar(200),
name varchar(200),
name2 varchar(200)
)
select * from music2
---第一种复制语句语法 后面的select 不管你是多表select 还是单表,都无所谓,但是要和前面的类型匹配就ok
insert into music2(id,school,name) select * from music
---第二种 (默认会常见一张新表) 复制某一列 将name换成*则是复制整张表
select name into music5 from music
--自定义复制(筛选条件)
select * into music6 from music where id > 3
select * from music5
---sql 删除语法
DELETE from cb_AdjustKhDtl from cb_AdjustKhDtl inner join cb_CostKh t2 on cb_AdjustKhDtl.CostKhGUID= t2.CostKhGUID
非典型T_SQL的总结的更多相关文章
- C-Lodop 非典型应用
Lodop是什么? 有人说她是报表打印工具,因为那个add_print_table语句把报表统计的那点事弄了个明明白白: 有人说她是条码打印工具,因为用了她再也不用后台生成条码图片了,前端一行指令就动 ...
- openerp 经典收藏 workflow中的‘非典型’自动触发器trigger_model(转载)
workflow中的‘非典型’自动触发器trigger_model 原文:http://cn.openerp.cn/workflow%E4%B8%AD%E7%9A%84%E9%9D%9E%E5%85% ...
- workflow中的‘非典型’自动触发器trigger_model
Openerp中workflow的设计机制 工作流程系统在OpenERP里是非常有用的机制,可以用于即时描述单据(模型)状态的演进过程.工作流实现了状态流转的可配置,通过迁移的 condition代替 ...
- SAP成都研究院非典型程序猿,菜园子小哥:当我用UI5诊断工具时我用些什么
身边有些年轻同事曾经向我表达过这种困扰:尽管完成日常工作没有任何问题,但是还想更进一步,把代码写得更好些,做到精益求精.现在写的代码能实现功能,但是不知道可以怎样写得更好. 除了阅读优秀的开源库开源框 ...
- 毕业季offer怎么拿?收下这份非典型求职面试指南
摘要:求职面试莫慌,先自我评估一下 ,华为云专家手把手为你指导. 本文分享自华为云社区<毕业季offer怎么拿?收下这份非典型求职面试指南>,原文作者:技术火炬手 . 又是一年毕业季,对于 ...
- GDIPlus非典型误用一例
// ** 初始化GDI+ Gdiplus::GdiplusStartupInput gdiplusStartupInput; // ** 该成员变量用来保存GDI+被初始化后在应用程序中的GDI+标 ...
- 一次非典型的SQL报错
昨天调试一个表值函数,结果出现了这个错误. mplicit conversion of varchar value to varchar cannot be performed because the ...
- 一个非典型的Linux路由配置方案
上周帮人解决了一个问题,这个问题绝对是非典型性的,采用了非常规的方法.虽然最终的方案非常不符合常规,非常不通用,充满了各种藏得很深的技巧或者说是trick,但是这个问题却是一个学习Linux路由的绝好 ...
- 非典型的scala程序及其编译后的结果
初学Scala Folder structure以及部分代码 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2xldmVyd3lx/font/5a6L5L ...
随机推荐
- [Python3 练习] 002 温度转换2
题目:温度转换 II (1) 描述 温度的刻画有两个不同体系:摄氏度 (Celsius) 和华氏度 (Fabrenheit) 请编写程序将用户输入的华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度 转 ...
- ### Error building SqlSession. ### The error may exist in SQL Mapper Configuration ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibat
这是一个由粗心导致的错误,具体报错如下: org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSessio ...
- Samba服务问答
1. samba服务用在什么地方?samba服务用于把Linux服务器上的文件或者打印接共享给windows或者Linux. 2. 在samba服务的配置文件中,[global]配置部分的securi ...
- dp(电梯与楼梯)
http://codeforces.com/problemset/problem/1249/E E. By Elevator or Stairs? time limit per test 2 seco ...
- Acwing.835. Trie字符串统计(模板)
维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x: “Q x”询问一个字符串在集合中出现了多少次. 共有N个操作,输入的字符串总长度不超过 105105,字符串仅包含小写英文字母 ...
- Python内建函数enumerate()用法及在for循环应用
Python 内建函数enumerate() 由于这个单纯很长,不容易记住,用法还是比较广泛的,下面讲述Python内建函数enumerate()用法. 1,实例 enumerate(sequence ...
- 汇编移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR
SHL.SHR.SAL.SAR: 移位指令 ;SHL(Shift Left): 逻辑左移 ;SHR(Shift Right): 逻辑右移 ;SAL(Shift Arithmetic ...
- 使用myBase Desktop来管理电脑上的资料
下载链接:下载链接:http://www.wjjsoft.com/download.html 选择自己的操作系统下的myBase Desktop 这里是下载的是安装包,有解压的版本的. 这里就简单介绍 ...
- Hadoop MapReduce实现人员二度关系运算
1.一度人脉:双方直接是好友 2.二度人脉:双方有一个以上共同的好友,这时朋友网可以计算出你们有几个共同的好友并且呈现数字给你.你们的关系是: 你->朋友->陌生人 3.三度人脉:即你朋友 ...
- CtfStudying之SSH私钥泄露
8/23/19 SSH私钥泄露 对于只是给定一个对应ip地址的靶场机器,我们需要对其进行扫描,探测其开放服务.我原来理解的渗透就是找到目标的漏洞,然后利用这些(这种)漏洞,最后拿到机器的最高权限:其实 ...