设为首页 加入收藏

TOP

积累一下SQL(二)
2015-11-21 01:25:40 】 浏览:3014
Tags:积累 SQL
e … when is null这样了。
行转列
现在数据库里面的表老是说横向表,纵向表,横向表就例如下面的表结构SubjectTest(id,name,subject,score)。假如要展示的结果是(学生,语文,数学,英语)这样的结果时则需要用到行转列
行转列有用到上面case when语句,大概是先把记录按姓名去分组,然后从分组中把各个分数用case分离出来,再用聚集函数求最值或者是求和,语句就这样子
select name, MAX( CASE [subject] WHEN '语文' THEN [score] ELSE 0 END ) AS '语文',
MAX( CASE [subject] WHEN '数学' THEN [score] ELSE 0 END ) AS '数学',
MAX( CASE [subject] WHEN '英语' THEN [score] ELSE 0 END ) AS '英语',
SUM([score]) AS '总分',
AVG([score]) AS '平均分'
FROM SubjectTest
GROUP BY [name]
原来也就这么一回事,当科目多了,MAX除了要多写几次外,还可以用用DBA妹子教的SQL拼凑生成把语句生成出来在执行,可惜视图View不支持这样子,唉!
在SQL Server 2005以上有另外一种方式pivot,直接上语句
SELECT * FROM subjecttest PIVOT( SUM(score) FOR [subject] IN( 语文,数学,英语 ) ) a
我很奇怪网上说的结果都是合并好的,而我的结果却是这个样子
有行转列,也会有列转行,不过这个更没意思,但顺带也说说UNPIOVT
select name,'语文',语文 as score FROM SubjectTest
UNION ALL
select name,'数学',数学 as score FROM SubjectTest
UNION ALL
select name,'英语',英语 as score FROM SubjectTest
SELECT * FROM subjecttest UNPIVOT ( score for [subject] IN (语文,数学,英语) ) a
Month year day 函数
这几个函数用于求日期的相应部分,顾名思义是月份,年份,天数
DECLARE @testTimePoint DateTime
SET @testTimePoint='2015-10-23'
SELECT YEAR(@testTimePoint) AS 年,MONTH(@testTimePoint) AS 月,DAY(@testTimePoint) AS 日
Cast函数
Cast函数用于作为数据类型转换,使用它有三点要注意
(1)两个表达式的数据类型完全相同。;
(2)两个表达式可隐性转换。
(3)必须显式转换数据类型。
像下面这样子是会报错的
SELECT CAST('12.3' AS int)
因为'12.3'只能转到浮点数,不能转成整形,但是浮点数能转成整形,要让它能成功转,就得这样子
SELECT CAST( CAST('12.3' AS Float) AS Int)
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇PL/SQLDeveloper遇到一个奇葩无效.. 下一篇OUTPUT 在isnert delete update ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目