SQL行转列示例:面试与统计查询的经典问题
需积分: 9 79 浏览量
更新于2024-09-15
收藏 2KB TXT 举报
"这篇文章主要介绍了如何在SQL中实现行列互换的操作,以及提供了一个在SQL Server中合并字符串的函数示例。"
在SQL中,有时我们需要将数据表的行和列进行转换,以便于数据分析或者特定的统计查询。标题中的"sql行列互换"就是指的这种操作。在描述中提到,这样的技巧可能在面试中也会被问到,因此对于SQL开发者来说,掌握这种技术是很有价值的。
以下是一个示例,展示了如何在SQL Server中将表格的行和列互换:
首先,我们有一个名为`tbltest1`的表,其中包含两列:`student`(学生)和`kemu`(科目),以及对应的分数`fenshu`。例如:
```
student | kemu | fenshu
--------|--------|------
student1| ѧ | 90
student1| Ӣ | 85
student2| ѧ | 92
student2| Ӣ | 82
```
要实现行列互换,我们可以利用SQL Server的动态SQL来实现。这里首先声明一个变量`@sql`来构建SQL语句。遍历`kemu`的所有唯一值,然后构造一个`CASE`表达式,根据科目`kemu`来计算每个学生的总分。最后,执行动态SQL得到结果:
```sql
DECLARE @sql VARCHAR(4000)
SET @sql = 'SELECT student'
SELECT @sql = @sql + ', SUM(CASE kemu WHEN ''' + kemu + ''' THEN fenshu ELSE 0 END) [' + kemu + ']'
FROM (SELECT DISTINCT kemu FROM tbltest1) AS a
SET @sql = @sql + ' FROM tbltest1 GROUP BY student'
EXEC (@sql)
```
执行这段代码后,我们将得到一个新的视图,其中行变成了学生,列变成了科目,而每个单元格则是对应学生在该科目的分数。
此外,文件还提到了一个在SQL Server中合并字符串的示例。创建一个名为`fliehebin`的用户定义函数,它接受一个`id`作为输入,然后返回该`id`下所有`strings`列的值连接成的单个字符串。这样,如果`tbltest2`有如下数据:
```
id | strings
---|--------
1 | my
1 | name
1 | is
1 | xudayu
2 | hello
2 | world
```
通过调用`dbo.fliehebin(id)`,我们可以得到:
```
id | dbo.fliehebin(id)
---|-------------------
1 | mynameisxudayu
2 | helloworld
```
请注意,这个功能在MySQL或Oracle中可能需要使用不同的方法来实现,因为它们的字符串处理函数可能有所不同。
SQL中的行列互换是一种重要的数据处理技巧,可以极大地帮助我们在分析数据时以更方便的形式展示结果。而合并字符串的功能则有助于将多个行数据整合成单行,便于进一步处理或展示。这两个示例展示了SQL在处理复杂数据操作时的灵活性。
2011-03-09 上传
2010-12-31 上传
2012-03-23 上传
2018-09-07 上传
RonnyJing
- 粉丝: 0
- 资源: 11
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析