问题:假设有张学生成绩表(tb)如下:
成都创新互联公司是一家集网站建设,荔湾企业网站建设,荔湾品牌网站建设,网站定制,荔湾网站建设报价,网络营销,网络优化,荔湾网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
想变成(得到如下结果):
代码:
WITH tb(姓名,课程,分数) AS
(
SELECT N'张三',N'语文',74
UNION ALL
SELECT N'张三',N'数学',83
UNION ALL
SELECT N'张三',N'物理',93
UNION ALL
SELECT N'李四',N'语文',79
UNION ALL
SELECT N'李四',N'数学',86
UNION ALL
SELECT N'李四',N'物理',88
)
SELECT 姓名 ,
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 姓名
方案一:利用NOT IN和SELECT TOP分页语句形式。
SELECT TOP 10 * FROM TestTable
WHERE ID NOT IN
(SELECT TOP 20 ID FROM TestTable ORDER BY ID)
ORDER BY ID
方案二:利用ID大于多少和SELECT TOP分页语句形式。
SELECT TOP 10 * FROM TestTable
WHERE ID > (
SELECT MAX(id) FROM
(SELECT TOP 20 id FROM
TestTable ORDER BY id) AS T)
ORDER BY ID
方案三:利用SQL Server中的特性ROW_NUMBER进行分页 。
SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY ID DESC) AS ROWID,*
FROM TestTable
) AS mytable where ROWID between 21 and 40
合并重复行。
SELECT * FROM A
UNION
SELECT * FROM B
不合并重复行。
SELECT * FROM A
UNION ALL
SELECT * FROM B
SELECT * FROM TestTable ORDER BY NEWID()
还可以结合TOP取随机的前N条记录。
SELECT TOP 100 * FROM TestTable ORDER BY NEWID()
例如我们以逗号(,)来分割数据,将如下数据。
分割成如下图所示:
SELECT R,
CASE WHEN CHARINDEX(',',R)>1 THEN LEFT(R,CHARINDEX(',',R)-1) ELSE NULL END AS R1 ,
CASE WHEN CHARINDEX(',',R)>1 THEN RIGHT(R,(LEN(R) - CHARINDEX(',',R))) ELSE NULL END AS R2
FROM t
代码较长,我们对代码进行拆分来理解:
SELECT CHARINDEX(',',',') --结果是1
SELECT CHARINDEX(',','NULL') --结果是0
SELECT CHARINDEX(',','') --结果是0
SELECT CHARINDEX(',','A,B') --结果是2
SELECT LEN('A,B') --结果是3
SELECT LEN('A,B') - CHARINDEX(',','A,B') --结果是3-2=1
SELECT RIGHT('A,B',( LEN('A,B') - CHARINDEX(',','A,B'))) --结果是 B
最后一步我们将'A,B'拆分出来了B,同理A我们也可以用类似的方法获取到。
例 等待1 小时2 分零3 秒后才执行SELECT 语句。
WAITFOR DELAY '01:02:03'
SELECT * FROM Employee
其中 DELAY是在延时多长时间后才开始执行。
例 等到晚上11 点零8 分后才执行SELECT 语句。
WAITFOR TIME '23:08:00'
SELECT * FROM Employee
其中TIME是等到具体某个时刻才开始执行。
网页标题:几个SQL查询小技巧,你学会几个?
浏览路径:http://www.csdahua.cn/qtweb/news11/282011.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网