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