在论坛中出现的比较难的sql问题:19(row_number函数 行转列、sql语句记流水)
原文:在论坛中出现的比较难的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
我的方法:
-
--drop table t
-
-
create table t(name varchar(10),pass varchar(10))
-
-
insert into t
-
select 'a', 'a' union all
-
select 'b', 'b' union all
-
select 'c', 'c' union all
-
select 'd', 'd' union all
-
select 'e', 'e' union all
-
select 'f', 'f' union all
-
select 'g', 'g' union all
-
select 'h', 'h' union all
-
select 'i', 'i'
-
go
-
-
-
select MAX(case when rn = 1 then name else null end) name,
-
MAX(case when rn = 1 then pass else null end) pass,
-
MAX(case when rn = 2 then name else null end) name,
-
MAX(case when rn = 2 then pass else null end) pass,
-
MAX(case when rn = 3 then name else null end) name,
-
MAX(case when rn = 3 then pass else null end) pass,
-
MAX(case when rn = 4 then name else null end) name,
-
MAX(case when rn = 4 then pass else null end) pass
-
from
-
(
-
select *,
-
ROW_NUMBER() over(partition by rownum order by getdate()) rn
-
from
-
(
-
select *,
-
(ROW_NUMBER() over(order by getdate())-1) / 4 rownum
-
from t
-
)t
-
)t
-
group by rownum
-
/*
-
name pass name pass name pass name pass
-
a a b b c c d d
-
e e f f g g h h
-
i i NULL NULL NULL NULL NULL NULL
-
*/
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的内容应该如下:
-
ID FirstQuantity ChangeQuantity FinalQuantity
-
1 0 10 10
-
1 10 20 30
-
1 30 30 60
这个功能,用编程的方法很好解决,就是一个一个循环写入,但是效率太慢了。
那么能不能用一条sql语句就搞定呢?
我的方法:
-
create table tc(ID int, Quantity int)
-
-
insert into tc
-
select 1 ,10 union all
-
select 1 ,20 union all
-
select 1 ,30
-
go
-
-
;with t
-
as
-
(
-
select *,
-
ROW_NUMBER() over(partition by id order by @@servername) rownum
-
from tc
-
)
-
-
-
select ID,
-
FirstQuantity,
-
ChangeQuantity,
-
FirstQuantity+ChangeQuantity as inalQuantity
-
from
-
(
-
select ID,
-
case when rownum = 1 then 0
-
else (select SUM(Quantity) from t t2
-
where t2.ID = t1.id and t2.rownum < t1.rownum)
-
end as FirstQuantity,
-
Quantity as ChangeQuantity
-
from t t1
-
)tt
-
/*
-
ID FirstQuantity ChangeQuantity inalQuantity
-
1 0 10 10
-
1 10 20 30
-
1 30 30 60
-
*/
在论坛中出现的比较难的sql问题:19(row_number函数 行转列、sql语句记流水)的更多相关文章
- 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)
原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...
- 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)
原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...
- 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)
原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)
原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)
原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)
原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...
- 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)
原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...
- 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)
原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
随机推荐
- [String]两个右补空格使字符串达到固定长度的函数 来自网上 请君自取
代码: package fixsizestring; public class TestClass { public static void main(String[] args) { for(int ...
- MySQL按日期分组并统计截止当前时间的总数(实例教程)
MySQL按日期分组并统计截止当前时间的总数 建表语句 SET NAMES utf8mb4; ; -- ---------------------------- -- Table structure ...
- log4j 异常时在日志文件里面显示空的。
如下图所示,输入的时候不要写 e.getStackTrace() 一般情况下不会出问题,但有时候就会出问题 解决方案
- Qt编写自定义控件60-声音波形图
一.前言 这个控件源自于一个音乐播放器,在写该音乐播放器的时候,需要将音频的数据转换成对应的频谱显示,采用的fmod第三方库来处理(fmod声音系统是为游戏开发者准备的革命性音频引擎,非常强大和牛逼) ...
- 把github代码自动部署到服务器
一.参考文献 https://developer.github.com/webhooks/ https://docs.gitlab.com/ee/user/project/integrations/w ...
- 软件测试成熟度模型TCMM (转载)
下面我们就看看是如何划分的,来评判一下各位同仁自己所在的公司,所在的级别. TCMM Level 1:Initial(初始级) 测试处于一个混乱的状态,还不能把测试同调试分开,在编码完成后才进行测 ...
- golang实现无限级菜单(beego框架下)
原文地址 http://www.niu12.com/article/37 golang实现无限级菜单(beego框架下) 数据表如下 -- ---------------------------- ...
- C# Hook原理及EasyHook
C# Hook原理及EasyHook简易教程 前言 在说C# Hook之前,我们先来说说什么是Hook技术.相信大家都接触过外挂,不管是修改游戏客户端的也好,盗取密码的也罢,它们都是如何实现的呢? 实 ...
- IDEA中的,让光标回到上一次停留的地方
IDEA中的,光标返回到上一次停留的地方ctrl+alt+ ←IDEA中的,光标返回到下一次停留的地方ctrl+alt+ → 不过要小心,笔记本电脑,默认的翻转屏幕的快捷键和这个冲突..我的选择是关闭 ...
- Django之用户注册
用户注册需要提交的信息包括: 用户名 邮箱 密码 确认密码 验证码 这里选择form表单提交信息,注册页面的响应函数就要分条件执行,get请求时要展示注册页面,post请求时要接收用户提交的信息,对信 ...
