工作中有许多比较常用的SQL脚本

news2024/12/23 2:11:07

工作中有许多比较常用的SQL脚本,今天开始分几章分享给大家。

1、行转列的用法PIVOT

CREATE table test
(id int,name nvarchar(20),quarter int,number int)
insert into test values(1,N'苹果',1,1000)
insert into test values(1,N'苹果',2,2000)
insert into test values(1,N'苹果',3,4000)
insert into test values(1,N'苹果',4,5000)
insert into test values(2,N'梨子',1,3000)
insert into test values(2,N'梨子',2,3500)
insert into test values(2,N'梨子',3,4200)
insert into test values(2,N'梨子',4,5500)
select * from test
结果:

图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

select ID,NAME,
[1] as '一季度',
[2] as '二季度',
[3] as '三季度',
[4] as '四季度'
from
test
pivot
(
sum(number)
for quarter in
([1],[2],[3],[4])
)
as pvt

结果:

图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、列转行的用法UNPIOVT

create table test2
(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)
insert into test2 values(1,'苹果',1000,2000,4000,5000)
insert into test2 values(2,'梨子',3000,3500,4200,5500)
select * from test2
(提示:可以左右滑动代码)

结果:

图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

--列转行
select id,name,quarter,number
from
test2
unpivot
(
number
for quarter in
([Q1],[Q2],[Q3],[Q4])
)
as unpvt

结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、字符串替换SUBSTRING/REPLACE

SELECT REPLACE(‘abcdefg’,SUBSTRING(‘abcdefg’,2,4),‘**’)
结果:

图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SELECT REPLACE(‘13512345678’,SUBSTRING(‘13512345678’,4,11),‘********’)
结果:

图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SELECT REPLACE(‘12345678@qq.com’,‘1234567’,‘******’)
结果:

图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4、查询一个表内相同纪录 HAVING

如果一个ID可以区分的话,可以这么写

SELECT * FROM HR.Employees
结果:

图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

select * from HR.Employees
where title in (
select title from HR.Employees
group by title
having count(1)>1)
结果:

图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对比一下发现,ID为1,2的被过滤掉了,因为他们只有一条记录

如果几个ID才能区分的话,可以这么写

select * from HR.Employees
where title+titleofcourtesy in
(select title+titleofcourtesy
from HR.Employees
group by title,titleofcourtesy
having count(1)>1)
结果:

图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

title在和titleofcourtesy进行拼接后符合条件的就只有ID为6,7,8,9的了

5、把多行SQL数据变成一条多列数据,即新增列

SELECT
id,
name,
SUM(CASE WHEN quarter=1 THEN number ELSE 0 END) ‘一季度’,
SUM(CASE WHEN quarter=2 THEN number ELSE 0 END) ‘二季度’,
SUM(CASE WHEN quarter=3 THEN number ELSE 0 END) ‘三季度’,
SUM(CASE WHEN quarter=4 THEN number ELSE 0 END) ‘四季度’
FROM test
GROUP BY id,name
结果:

图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们将原来的4列增加到了6列。细心的朋友可能发现了这个结果和上面的行转列怎么一模一样?其实上面的行转列是省略写法,这种是比较通用的写法。

6、表复制

语法1:Insert INTO table(field1,field2,…) values(value1,value2,…)

语法2:Insert into Table2(field1,field2,…) select value1,value2,… from Table1

(要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。)

语法3:SELECT vale1, value2 into Table2 from Table1

(要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。)

语法4:使用导入导出功能进行全表复制。如果是使用【编写查询以指定要传输的数据】,那么在大数据表的复制就会有问题?因为复制到一定程度就不再动了,内存爆了?它也没有写入到表中。而使用上面3种语法直接执行是会马上刷新到数据库表中的,你刷新一下mdf文件就知道了。

7、利用带关联子查询Update语句更新数据

–方法1:
Update Table1
set c = (select c from Table2 where a = Table1.a)
where c is null

–方法2:
update A
set newqiantity=B.qiantity
from A,B
where A.bnum=B.bnum

–方法3:
update
(select A.bnum ,A.newqiantity,B.qiantity from A
left join B on A.bnum=B.bnum) AS C
set C.newqiantity = C.qiantity
where C.bnum =‘001’

8、连接远程服务器

–方法1:
select * from openrowset(
‘SQLOLEDB’,
‘server=192.168.0.1;uid=sa;pwd=password’,
‘SELECT * FROM dbo.test’)

–方法2:
select * from openrowset(
‘SQLOLEDB’,
‘192.168.0.1’;
‘sa’;
‘password’,
‘SELECT * FROM dbo.test’)
当然也可以参考以前的示例,建立DBLINK进行远程连接

9、Date 和 Time 样式 CONVERT

CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。

语法

CONVERT(data_type(length),data_to_be_converted,style)

data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

可以使用的 style 值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
SELECT CONVERT(varchar(100), GETDATE(), 0)
–结果:
12 7 2020 9:33PM
SELECT CONVERT(varchar(100), GETDATE(), 1)
–结果:
12/07/20
SELECT CONVERT(varchar(100), GETDATE(), 2)
–结果:
20.12.07
SELECT CONVERT(varchar(100), GETDATE(), 3)
–结果:
07/12/20
SELECT CONVERT(varchar(100), GETDATE(), 4)
–结果:
07.12.20
SELECT CONVERT(varchar(100), GETDATE(), 5)
–结果:
07-12-20
SELECT CONVERT(varchar(100), GETDATE(), 6)
–结果:
07 12 20
SELECT CONVERT(varchar(100), GETDATE(), 7)
–结果:
12 07, 20
SELECT CONVERT(varchar(100), GETDATE(), 8)
–结果:
21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 9)
–结果:
12 7 2020 9:33:18:780PM
SELECT CONVERT(varchar(100), GETDATE(), 10)
–结果:
12-07-20
SELECT CONVERT(varchar(100), GETDATE(), 11)
–结果:
20/12/07
SELECT CONVERT(varchar(100), GETDATE(), 12)
–结果:
201207
SELECT CONVERT(varchar(100), GETDATE(), 13)
–结果:
07 12 2020 21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(), 14)
–结果:
21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(), 20)
–结果:
2020-12-07 21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 21)
–结果:
2020-12-07 21:33:18.780
SELECT CONVERT(varchar(100), GETDATE(), 22)
–结果:
12/07/20 9:33:18 PM
SELECT CONVERT(varchar(100), GETDATE(), 23)
–结果:
2020-12-07
SELECT CONVERT(varchar(100), GETDATE(), 24)
–结果:
21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 25)
–结果:
2020-12-07 21:33:18.780
SELECT CONVERT(varchar(100), GETDATE(), 100)
–结果:
12 7 2020 9:33PM
SELECT CONVERT(varchar(100), GETDATE(), 101)
–结果:
12/07/2020
SELECT CONVERT(varchar(100), GETDATE(), 102)
–结果:
2020.12.07
SELECT CONVERT(varchar(100), GETDATE(), 103)
–结果:
07/12/2020
SELECT CONVERT(varchar(100), GETDATE(), 104)
–结果:
07.12.2020
SELECT CONVERT(varchar(100), GETDATE(), 105)
–结果:
07-12-2020
SELECT CONVERT(varchar(100), GETDATE(), 106)
–结果:
07 12 2020
SELECT CONVERT(varchar(100), GETDATE(), 107)
–结果:
12 07, 2020
SELECT CONVERT(varchar(100), GETDATE(), 108)
–结果:
21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 109)
–结果:
12 7 2020 9:33:18:780PM
SELECT CONVERT(varchar(100), GETDATE(), 110)
–结果:
12-07-2020
SELECT CONVERT(varchar(100), GETDATE(), 111)
–结果:
2020/12/07
SELECT CONVERT(varchar(100), GETDATE(), 112)
–结果:
20201207
SELECT CONVERT(varchar(100), GETDATE(), 113)
–结果:
07 12 2020 21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(), 114)
–结果:
21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(), 120)
–结果:
2020-12-07 21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 121)
–结果:
2020-12-07 21:33:18.780

7
SELECT CONVERT(varchar(100), GETDATE(), 112)
–结果:
20201207
SELECT CONVERT(varchar(100), GETDATE(), 113)
–结果:
07 12 2020 21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(), 114)
–结果:
21:33:18:780
SELECT CONVERT(varchar(100), GETDATE(), 120)
–结果:
2020-12-07 21:33:18
SELECT CONVERT(varchar(100), GETDATE(), 121)
–结果:
2020-12-07 21:33:18.780

以上内容,在工作中比较常用,能记住最好。不能记住就收藏起来,在需要的时候查询即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

整理一下5个全国化的股票十倍杠杆正规平台(2023最大十倍杠杆炒股平台)

在全国范围内,有诸多优秀的杠杆平台可供选择。本文将介绍5个全国化的股票十倍杠杆正规平台:红腾网、广瑞网、一鼎盈、广盛网、富灯网。 1. 红腾网 红腾网是国内的一家知名杠杆交易平台,平台以高效、便捷、安全的特点著称。 2. 广瑞网 广瑞…

拿走吧你,Fiddler模拟请求发送和修改响应数据

模拟伪造请求 方法一:打断点模拟HTTP请求 1、浏览器页面填好内容后(不要操作提交),打开fiddler,设置请求前断点,点击菜单fiddler,”Rules”\”Automatic Breakpoints”\”Before Requests” 2、在页面上点…

数字孪生的实用性为何遭受质疑?这篇文章为你解答

数字孪生技术的实用性体现在哪?数字孪生技术不仅是当今科技领域的热点,也是各行各业不断探索和应用的新兴领域。这项技术的实用性在于它的多领域适用性和巨大潜力。然而,目前有许多声音认为数字孪生技术是一项“没用”的技术,仅仅…

扑克牌QB/T 2228标准

QB/T 2228-2013扑克牌 本标准规定了扑克牌的术语和定义、分类及组成、要求、试验方法、检验规则和标志、包装、运输、贮存。 本标准适用于纸质扑克牌。 规范性引用文件 下列文件对于本文件的应用是必不可少的.凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期…

抖音生活服务“整编”,一场消费与产业的生态共赢

团券、到店、核销,这已经成为当代年轻人出去吃饭、理发等的日常,如同上网买衣服、买手机一样。这样的消费日常背后,稳定已久的生活服务行业再次硝烟弥漫。搅动一池春水的,是抖音等互联网后来者。 根据媒体报道,抖音生…

市场开始复苏,三星传调涨内存芯片高达20% | 百能云芯

随着行动内存芯片市场迹象显示出复苏迹象,并且最早在第四季度供不应求,三星电子已宣布将提高动态随机存取存储器(DRAM)和NAND闪存芯片的价格,幅度达到10%~20%。 韩国经济日报报道,知情人士透露,…

四川玖璨电子商务有限公司:怎么做视频运营?

视频运营是指通过策划、发布和推广视频内容,以吸引更多的用户观看,并实现商业价值的过程。在当今数字化时代,视频已经成为人们获取信息、娱乐消遣的重要方式之一,因此,如何做好视频运营成为了各大平台和个人所关注的焦…

有了这个Python库,免费实现验证码识别

在做UI自动化时,无论是APP还是Web在登录页面经常会遇到需要输入验证码的时候,网上也有很多方法进行帮助我们,比如通过百度OCR的接口或者其他平台的开源接口,但是大多数都是收费的,对于我们个人学习非常不友好。 以前小…

[Java] String详解

愿一分耕耘,一份收获 文章目录 前言1. String基础概念2. String对象的比较2.1 与equals()的应用 3. 字符串的转化3.1 数字与字符串的转化3.2 大小写转换3.3 字符串与字符数组转换4. 字符串修改1.引入库2.读入数据 总结 前言 String这部分是面试中常常考到的题.string常量池,Sr…

流量录制回放工具在自动化测试领域应用探索

引言: 随着中国农业银行技术架构的日益更迭与业务场景的不断创新,测试工作正在面临数据构造繁琐、案例维护成本较高且质量参差不齐等诸多问题与挑战,主要体现在以下四方面: 一是在系统架构升级与代码重构时,大量原始接…

01_kafka_环境搭建安装_topic管理

文章目录 安装jdk配置主机名Zookeeper 下载与安装Kafka 下载与安装测试集群版安装测试输出 安装jdk 略 配置主机名 hostnamectl set-hostname kafka_1 /etc/sysconfig/network HOSTNAMEkafka_1/etc/hosts ip kafka_1ping kafka_1 测试 Zookeeper 下载与安装 由于 集群…

科技云报道:青云科技为何成为IDC云转型的“神队友”?

科技云报道原创。 如今随着出海企业数量的不断增长,跨境业务也逐渐从蓝海变红海,从“价格战”到“智能战”。 一个明显的变化,来自企业对于出海效率的提升。《埃森哲2022中国企业国际化研究》指出,企业想要在出海浪潮中取胜&…

智能合约平台开发指南

随着区块链技术的普及,智能合约平台已经成为了这个领域的一个重要趋势。智能合约可以自动化执行合同条款,大大减少了执行和监督合同条款所需的成本和时间。那么,如何开发一个智能合约平台呢?以下是一些关键步骤。 一、选择合适…

赴日IT工作 日本的IT工作怎么样?

有许多朋友困惑去日本做IT需要什么条件?日本的IT工作怎么样?今天我来给大家简单分析一下。如果你想要去做赴日IT工作,需要国内正规本科或大专学历及以上才可以,然后就是你的技术和日语要过关,比较重要的是日语&#xf…

cleanmymac这个软件怎么样?好用吗

cleanmymac是我必装的mac端清理软件,界面简洁好看,完美适配mac系统,文件清理的速度、精度都比较优秀,还是比较不错的呢。 虽然说mac平时不需要大量维护进行清理但是有一些临时文件、软件残留、系统缓存、下载安装包还是会日积月累…

Java笔记:GC日志

1. 启用GC日志 -verbose:gc -XX:PrintGC -XX:PrintGCDetails -XX:PrintGCDateStamps -Xloggc:/opt/logs/gc.log在JDK 8中, -verbose:gc是 -XX:PrintGC一个别称,日志格式等价与: -XX:PrintGC。 不过在JDK 9中 -XX:PrintGC被标记deprecated…

香港渣打银行个人开户

渣打银行成立于1853年,全称为标准渣打银行,总部设在英国伦敦,渣打银行是香港最大的外商独资注册银行,是香港的三大发钞银行之一。 一、渣打银行开个人户条件? 在渣打银行开户所需要的条件和在其他银行开户所需要的条件…

若依注册的时候给个默认部门出现获取用户信息异常

想在注册的时候在数据库中查询一个部门给它一个默认部门,结果出现异常——【[handleServiceException,59] - 获取用户信息异常】 经分析代码,此方法有如下注解 以上注解会在mapper.xml中做如下操作 在做此操作之前会进入一个拦截器,根据token…

Win10 update version 22H2

下载 Windows 10 下载新版本win10 安装新版本win10 1703 更新到最新版本 22H2 2023.09.12 20:20 到 2023.09.12 23:44

信通传媒携各家虚商领袖,走进九牛汇

2023年9月8日,各家虚拟运营商领袖相约到厦,齐聚九牛汇共探通信行业革新之路! 厦门98投洽会,作为一个规模庞大的国际型盛会,吸引了全球各行各业的精英和企业家。由通信世界主办的《云通信服务工业企业发展论坛》也在这天…