锁定老帖子 主题:一道有趣的sql题2
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-12
biaobiao520 写道 java_jing 写道 = =!如果是Oracle用下函数就行了。
什么函数? 同求函数 |
|
返回顶楼 | |
发表时间:2011-04-12
key_hua 写道 biaobiao520 写道 java_jing 写道 = =!如果是Oracle用下函数就行了。
什么函数? 同求函数 oracle11g 或者 SQL Server 2005+ 可以看看 UNPIVOT函数 PIVOT函数 |
|
返回顶楼 | |
发表时间:2011-04-12
corejava5 写道 key_hua 写道 biaobiao520 写道 java_jing 写道 = =!如果是Oracle用下函数就行了。
什么函数? 同求函数 oracle11g 或者 SQL Server 2005+ 可以看看 UNPIVOT函数 PIVOT函数 PIVOT UNPIVOT,这两个知道,但是没见人用过。。。 |
|
返回顶楼 | |
发表时间:2011-04-12
我觉得列转行比行转列要简单
|
|
返回顶楼 | |
发表时间:2011-04-12
行列转换建议用 动态拼接left join 实现 |
|
返回顶楼 | |
发表时间:2011-04-12
《SQL HACKS》
这本书中红色的部分有这个很好的解释 第1章 SQL基础 1. 在命令行中运行SQL 2. 在程序中连接到SQL上 3. 执行条件INSERT 4. 更新数据库 5. 使用SQL求解填字游戏 6. 不反复执行相同的计算 第2章 连接、联合和视图 7. 不破坏现有查询的修改模式 8. 过滤行和列 9. 在索引列上过滤 10. 将子查询转换为JOIN 11. 将聚合子查询转换为JOIN 12. 简化复杂的更新 13. 为关系选择正确的连接风格 14. 生成组合 第3章 文本处理 15. 不用LIKE搜索关键词 16. 跨列搜索字符串 17. 求解重组字 18. 排序电子邮件 第4章 日期处理 19. 将字符串转换为日期 20. 发现数据中的趋势 21. 基于任何日期条件的报告 22. 生成季度报告 23. 月份的第二个星期二 第5章 数值处理 24. 计算结果集的乘积 25. 计算累加和 26. 包含JOIN遗忘的行 27. 识别重叠范围 28. 避免零做除数 29. 计算行数的其他途径 30. 计算两个字段的最大值 31. 反聚合COUNT 32. 克服舍入误差 33. 同时得到值和小计 34. 计算中位数 35. 将结果展示为图表 36. 计算GPS定位之间的距离 37. 让货物清单和支付清单对应起来 38. 找出换位错误 39. 计算累进税 40. 计算名次 第6章 联机应用 41. 将Web页面复制到表中 42. 使用SVG图形化地展示数据 43. 将导航特性添加到Web应用上 44. 从Microsoft Access中隧道访问MySQL 45. 处理Web服务器日志 46. 在数据库中存储图像 47. 利用SQL注入漏洞 48. 防止SQL注入攻击 第7章 组织数据 49. 跟踪不常变化的值 50. 合并包含不同数据的表 51. 将行显示为列 52. 将列显示为行 53. 清除不一致的记录 54. 去规范化你的表 55. 移入其他人的数据 56. 做媒 57. 生成唯一序列号 第8章 存储少量数据 58. 在数据库中存储参数 59. 定义个性化参数 60. 创建一系列的个性参数 61. 设置基于行的安全性 62. 不用表执行查询 63. 不使用表生成行 第9章 加锁与性能 64. 确定你的隔离级别 65. 使用悲观锁 66. 使用乐观锁 67. 事务中的隐含加锁 68. 处理不期待的重做 69. 在数据库中执行函数 70. 将查询结合起来 71. 提取大量数据行 72. 提取结果集的子集 73. 文件和数据库的混合存储 74. 比较和同步表 75. 在一对多连接中最小化带宽 76. 使用压缩避免LOB 第10章 制作报表 77. 在数据透视表中填写遗漏的数据 78. 按范围分组 79. 唯一地标识更新 80. 玩Six Degrees of Kevin Bacon游戏 81. 构造决策表 82. 生成顺序的或遗漏的数据 83. 找出每个组中的前n个元素 84. 在列中存储逗号分隔的列表 85. 遍历简单树 86. 在数据库中建立队列 87. 生成日历 88. 从子查询中测试两个值 89. 五选三 第11章 用户和管理 90. 实现应用程序级账户 91. 移出和移入表定义 92. 部署应用程序 93. 自动创建数据库用户 94. 创建用户和管理员 95. 生成自动更新 96. 创建审计跟踪 第12章 更广阔的访问 97. 允许匿名账户 98. 找出并停止耗时漫长的查询 99. 不要用尽磁盘空间 100. 从Web页面中运行SQL |
|
返回顶楼 | |
发表时间:2011-04-12
SQL Cookbook
第12章 报表和数据仓库运算 (各种不同形式数据库的写法),网上电子版很多 |
|
返回顶楼 | |
发表时间:2011-04-12
sdtm1016 写道 《SQL HACKS》
这本书中红色的部分有这个很好的解释 第1章 SQL基础 1. 在命令行中运行SQL 2. 在程序中连接到SQL上 3. 执行条件INSERT 4. 更新数据库 5. 使用SQL求解填字游戏 6. 不反复执行相同的计算 第2章 连接、联合和视图 7. 不破坏现有查询的修改模式 8. 过滤行和列 9. 在索引列上过滤 10. 将子查询转换为JOIN 11. 将聚合子查询转换为JOIN 12. 简化复杂的更新 13. 为关系选择正确的连接风格 14. 生成组合 第3章 文本处理 15. 不用LIKE搜索关键词 16. 跨列搜索字符串 17. 求解重组字 18. 排序电子邮件 第4章 日期处理 19. 将字符串转换为日期 20. 发现数据中的趋势 21. 基于任何日期条件的报告 22. 生成季度报告 23. 月份的第二个星期二 第5章 数值处理 24. 计算结果集的乘积 25. 计算累加和 26. 包含JOIN遗忘的行 27. 识别重叠范围 28. 避免零做除数 29. 计算行数的其他途径 30. 计算两个字段的最大值 31. 反聚合COUNT 32. 克服舍入误差 33. 同时得到值和小计 34. 计算中位数 35. 将结果展示为图表 36. 计算GPS定位之间的距离 37. 让货物清单和支付清单对应起来 38. 找出换位错误 39. 计算累进税 40. 计算名次 第6章 联机应用 41. 将Web页面复制到表中 42. 使用SVG图形化地展示数据 43. 将导航特性添加到Web应用上 44. 从Microsoft Access中隧道访问MySQL 45. 处理Web服务器日志 46. 在数据库中存储图像 47. 利用SQL注入漏洞 48. 防止SQL注入攻击 第7章 组织数据 49. 跟踪不常变化的值 50. 合并包含不同数据的表 51. 将行显示为列 52. 将列显示为行 53. 清除不一致的记录 54. 去规范化你的表 55. 移入其他人的数据 56. 做媒 57. 生成唯一序列号 第8章 存储少量数据 58. 在数据库中存储参数 59. 定义个性化参数 60. 创建一系列的个性参数 61. 设置基于行的安全性 62. 不用表执行查询 63. 不使用表生成行 第9章 加锁与性能 64. 确定你的隔离级别 65. 使用悲观锁 66. 使用乐观锁 67. 事务中的隐含加锁 68. 处理不期待的重做 69. 在数据库中执行函数 70. 将查询结合起来 71. 提取大量数据行 72. 提取结果集的子集 73. 文件和数据库的混合存储 74. 比较和同步表 75. 在一对多连接中最小化带宽 76. 使用压缩避免LOB 第10章 制作报表 77. 在数据透视表中填写遗漏的数据 78. 按范围分组 79. 唯一地标识更新 80. 玩Six Degrees of Kevin Bacon游戏 81. 构造决策表 82. 生成顺序的或遗漏的数据 83. 找出每个组中的前n个元素 84. 在列中存储逗号分隔的列表 85. 遍历简单树 86. 在数据库中建立队列 87. 生成日历 88. 从子查询中测试两个值 89. 五选三 第11章 用户和管理 90. 实现应用程序级账户 91. 移出和移入表定义 92. 部署应用程序 93. 自动创建数据库用户 94. 创建用户和管理员 95. 生成自动更新 96. 创建审计跟踪 第12章 更广阔的访问 97. 允许匿名账户 98. 找出并停止耗时漫长的查询 99. 不要用尽磁盘空间 100. 从Web页面中运行SQL 好书啊好书!! |
|
返回顶楼 | |
发表时间:2011-04-12
yangguo 写道 biaobiao520 写道 yangguo 写道 biaobiao520 写道 SELECT a.col , a.YEAR, a.columna DATA
FROM (SELECT 'columna' col, YEAR, columna FROM my_test) a, (SELECT 'columnb' col, YEAR, columnb FROM my_test) b WHERE a.YEAR = b.YEAR UNION ALL SELECT b.col, b.YEAR, B.COLUMNB DATA FROM (SELECT 'columna' col, YEAR, columna FROM my_test) a, (SELECT 'columnb' col, YEAR, columnb FROM my_test) b WHERE a.YEAR = b.YEAR; 整理了一下别名,貌似column不能用作列名 受教了 晕。。。 好像直接这么取就可以了。。。 SELECT a.col , a.YEAR, a.columna DATA FROM (SELECT 'columna' col, YEAR, columna FROM my_test) a UNION ALL SELECT b.col, b.YEAR, B.COLUMNB DATA FROM (SELECT 'columnb' col, YEAR, columnb FROM my_test) b 哈哈,我刚发短信给你,也是这样。 看到第一个我也迷糊,干嘛要内联一下 |
|
返回顶楼 | |
发表时间:2011-04-13
去itpub看看去,那边高手多.这个是老问题了.从oracle8到10g的解决方案都有
|
|
返回顶楼 | |