原文:在论坛中出现的比较难的sql问题:19(row_number函数 行转列、sql语句记流水)


最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。

1、SQLServer 把表的挨着的四条数据合并到一起

http://bbs.csdn.net/topics/390735343

数据:

a          a         

 b          b         

 c          c         

 d          d         

 e          e         

 f          f         

 g          g         

 h          h         

 i              i

我的方法:


  1. --drop table t
  2. create table t(name varchar(10),pass varchar(10))
  3. insert into t
  4. select 'a', 'a' union all
  5. select 'b', 'b' union all
  6. select 'c', 'c' union all
  7. select 'd', 'd' union all
  8. select 'e', 'e' union all
  9. select 'f', 'f' union all
  10. select 'g', 'g' union all
  11. select 'h', 'h' union all
  12. select 'i', 'i'
  13. go
  14. select MAX(case when rn = 1 then name else null end) name,
  15. MAX(case when rn = 1 then pass else null end) pass,
  16. MAX(case when rn = 2 then name else null end) name,
  17. MAX(case when rn = 2 then pass else null end) pass,
  18. MAX(case when rn = 3 then name else null end) name,
  19. MAX(case when rn = 3 then pass else null end) pass,
  20. MAX(case when rn = 4 then name else null end) name,
  21. MAX(case when rn = 4 then pass else null end) pass
  22. from
  23. (
  24. select *,
  25. ROW_NUMBER() over(partition by rownum order by getdate()) rn
  26. from
  27. (
  28. select *,
  29. (ROW_NUMBER() over(order by getdate())-1) / 4 rownum
  30. from t
  31. )t
  32. )t
  33. group by rownum
  34. /*
  35. name pass name pass name pass name pass
  36. a a b b c c d d
  37. e e f f g g h h
  38. i i NULL NULL NULL NULL NULL NULL
  39. */

2、怎么用简单的sql语句记流水?

http://bbs.csdn.net/topics/390674508

有一个流水表TF,字段有ID,FirstQuantity,ChangeQuantity,FinalQuantity。ID表示物品,后面几个表示期初数量,变化数量,最终数量。

假设表TF现在是空

有一张变动表TC,字段有ID,Quantity。表示某物品的数量。里面会有重复。内容如下:

ID Quantity

1  10

1  20

1  30

那么当我把TC的数据加入到TF后,TF的内容应该如下:


  1. ID FirstQuantity ChangeQuantity FinalQuantity
  2. 1 0 10 10
  3. 1 10 20 30
  4. 1 30 30 60

这个功能,用编程的方法很好解决,就是一个一个循环写入,但是效率太慢了。

那么能不能用一条sql语句就搞定呢?

我的方法:


  1. create table tc(ID int, Quantity int)
  2. insert into tc
  3. select 1 ,10 union all
  4. select 1 ,20 union all
  5. select 1 ,30
  6. go
  7. ;with t
  8. as
  9. (
  10. select *,
  11. ROW_NUMBER() over(partition by id order by @@servername) rownum
  12. from tc
  13. )
  14. select ID,
  15. FirstQuantity,
  16. ChangeQuantity,
  17. FirstQuantity+ChangeQuantity as inalQuantity
  18. from
  19. (
  20. select ID,
  21. case when rownum = 1 then 0
  22. else (select SUM(Quantity) from t t2
  23. where t2.ID = t1.id and t2.rownum < t1.rownum)
  24. end as FirstQuantity,
  25. Quantity as ChangeQuantity
  26. from t t1
  27. )tt
  28. /*
  29. ID FirstQuantity ChangeQuantity inalQuantity
  30. 1 0 10 10
  31. 1 10 20 30
  32. 1 30 30 60
  33. */
发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

在论坛中出现的比较难的sql问题:19(row_number函数 行转列、sql语句记流水)的更多相关文章

  1. 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)

    原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  2. 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)

    原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...

  3. 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)

    原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...

  4. 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)

    原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  5. 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)

    原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  6. 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)

    原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  7. 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)

    原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...

  8. 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)

    原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...

  9. 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)

    原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

随机推荐

  1. linux内核在哪里处理设备树中compatible为"syscon"的节点?

    答: linux内核源码drivers/mfd/syscon.c中的of_syscon_register()接口对regmap_config进行初始化 注: linux内核源码版本为5.1.0

  2. centos7.6环境zabbix3.2源码编译安装版升级到zabbix4.0长期支持版

    zabbix3.2源码编译安装版升级到zabbix4.0长期支持版 项目需求: .2版本不再支持,想升级成4.0的长期支持版 环境介绍: zabbix服务端是编译安装的,数据库和web在一台机器上 整 ...

  3. shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中

    shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中 利用shell脚本将文本数据导入到mysql中 需求1:处理文本中的数据,将文本中的数据插入到mys ...

  4. shell编程系列2--字符串的处理

    shell编程系列2--字符串的处理 字符串的处理 .计算字符串的长度 方法1 ${#string} 方法2 expr length "$string" (如果string中间有空 ...

  5. 泡泡一分钟:LandmarkBoost: Efficient Visual Context Classifiers for Robust Localization

    Marcin Dymczyk, Igor Gilitschenski, Juan Nieto, Simon Lynen, Bernhard Zeis, and Roland Siegwart Land ...

  6. 深入学习c++--多线程编程(二)【当线程间需要共享非const资源】

    1. 遇到的问题 #include <iostream> #include <thread> #include <chrono> #include <futu ...

  7. Spring cloud微服务安全实战-3-10API安全机制之授权

    说一下最后一个模块,授权.用来做访问控制,控制哪个用户能干什么.哪个用户不能干什么? 遵循最小的授权原则,一个用户只给他必须要的那些权限. 1.你的请求是不是需要权限认证, 有一些请求是根本不需要权限 ...

  8. 为什么在MySQL数据库中无法创建外键?(MyISAM和InnoDB详解)

    问题描述:为什么在MySQL数据库中不能创建外键,尝试了很多次,既没有报错,也没有显示创建成功,真实奇了怪,这是为什么呢? 问题解决:通过查找资料,每次在MySQL数据库中创建表时默认的情况是这样的: ...

  9. PAT 甲级 1073 Scientific Notation (20 分) (根据科学计数法写出数)

    1073 Scientific Notation (20 分)   Scientific notation is the way that scientists easily handle very ...

  10. POJ Corn Fields 状态压缩DP基础题

    题目链接:http://poj.org/problem?id=3254 题目大意(名称什么的可能不一样,不过表达的意思还是一样的): 种玉米 王小二从小学一年级到现在每次考试都是班级倒数第一名,他的爸 ...