本篇文章是对一些常用的sql语句进行了总结与分析,需要的朋友参考下,也许会有你需要的。
1.SQL行列转换
问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
sql语句为:
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 姓名
2.SQL分页
--分页方案一:(利用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
SELECT TOP 页大小 * FROM TestTable
WHERE (ID NOT IN (SELECT TOP 页大小*页数 id FROM 表 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
SELECT TOP 页大小 * FROM TestTable
WHERE (ID > (SELECT MAX(id) FROM (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id) AS T))
ORDER BY ID
-------------------------------------
--分页方案三:(利用SqlServer2005中的新特性ROW_NUMBER进行分页)
Select * FROM (
select ROW_NUMBER()Over(order by id desc) as rowId,* from TestTable
) as mytable
where rowId between 21 and 40
大家根据自己的需要选择对应的sql语句。
提示:方案三必须为sqlserver2005以上版本才可使用。
3.SQL查询结果合并
使用UNION 和UNION ALL。UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一个符合条件的资料都列出来,无论资料值有无重复。
--合并重复行
select * from A
union
select * from B
--不合并重复行
select * from A
union all
select * from B
提示:两个表查询的结果相同,才能进行合并
4.SQL随机排序
使用ORDER BY NEWID()
SELECT * FROM TestTable ORDER BY NEWID()
5.其他
欢迎各位补充~
如果有不对的地方还请指出,如果你觉得这个整理对你有所帮助,就点下推荐,谢谢。