在论坛中出现的比较难的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(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
随机推荐
- Oracle列信息表 all_tab_columns中的data_length和data_precision字段区别
Oracle列信息表 all_tab_columns中的data_length和data_precision字段区别 区别: 这两个属性都属于user_tab_columns视图,他们的含义:1,da ...
- 文章后面的QA或FAQ
QA:question&answer FAQ: Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”
- docker 打印带时间的日志
1, 根据容器日志查看连接情况 docker logs 684 (因为从6.30日开是打印,太慢了.) 2,docker带参数的打印出日志 docker logs 684 --since=&quo ...
- leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings
542. 01 Matrix https://www.cnblogs.com/grandyang/p/6602288.html 将所有的1置为INT_MAX,然后用所有的0去更新原本位置为1的值. 最 ...
- Python设计模式之MVC模式
# -*- coding: utf-8 -*- # author:baoshan quotes = ('A man is not complete until he is married. Then ...
- Cocoa Framework中GB2312与UTF16编码之间的相互转换
代码如下: NSString *orgStr = @"你好,世界!"; NSStringEncoding enc = CFStringConvertEncodingToNSStri ...
- 5-1 嵌套while循环应用
package com.imooc; public class forDemo { public static void main(String[] args) { ;//外重循环的循环变量: ;// ...
- netty5拆包问题解决实例
基于之前的例子(参见netty5自定义私有协议实例),我们修改下客户端handler,让发送的数据超过1024字节: NettyClientHandler: /** * 构造PCM请求消息体 * * ...
- 深入学习c++--智能指针(四)--使用建议
1. 不要自己手动管理资源 2. 一个裸指针不要用两个shared_ptr管理,unique_ptr 3. 使用shared_ptr作为函数的接口,如果有可能用 const shared_ptr&am ...
- Spring cloud微服务安全实战-5-11实现基于token的SSO(1)
基于服务器session的SSO的方案,用户的登陆状态都是存在服务器端的 基于浏览器cookie的token实现一个sso,在原来的基础上做进一步的改造.让他不依赖session.而是完全由cooki ...
