在论坛中出现的比较难的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(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
随机推荐
- win10: ctrl+shift不能切换输入法的问题
习惯了使用Ctrl+Shift切换输入法,乍然切换到Win10,很不适应,可用以下方法修改之. 1. 点击开始菜单,点击“设置”按钮 2. 选择“时间与语言” 3. 选择“区域和语言”按钮,查看右 ...
- IFC构件位置信息—ObjectPlacement
在IFC标准中,采用相对坐标系对构件定位.如柱(IfcColumn)的定位信息(局部坐标系及参考坐标系)由ObjectPlacement描述.ObjectPlacement由两部分组成: (1)Pla ...
- DRBD UpToDate/DUnknown 故障恢复
故障如下: root@drbd1:~# drbd-overview 0:data/0 StandAlone Primary/Unknown UpToDate/DUnknown /data/mysql ...
- 【JS】jquery展示JSON插件JSONView
JSONView介绍 jQuery插件,用于显示漂亮的JSON. 官网地址:https://plugins.jquery.com/jsonview/ git地址:https://github.com/ ...
- 【composer】 PHP composer 镜像地址更换
如果你使用的是 laravel-china.org 得 composer 镜像.那么近期执行更新时候就会报错: 莫慌,这是因为 laravel-china.org 已经停止了对composer得更新. ...
- 批处理&提权命令
提权应用 批处理遍历webshell可访问目录 opendir.readdir.is_dir.is_writable这几个遍历文件夹的函数,在php限制的情况下,找可执行目录就没有优势了. @echo ...
- Mathtype安装与最简破解
1.MathType资源 链接: https://pan.baidu.com/s/1UapJCcfU7Me_rIWdAe5nfw 提取码: 1y9i 2.破解 我之前的30天试用期过了,没来得 ...
- 关于Hive中的join和left join的理解
一.join与left join的全称 JOIN是INNER JOIN的简写,LEFT JOIN是LEFT OUTER JOIN的简写. 二.join与left join的应用场景 JOIN一般用于A ...
- java properties文件转义字符和中文乱码解决
properties文件的分隔符是 =或者 : 第一次出现的就是分割符,第二次出现的也不需要转义,也即是(忽略掉[],只是着重描述字符) [\=] [\:] 或者 [=] [:] ...
- [HTTPS] - 请求API失败(Could not create SSL/TLS secure channel)之解决
背景 在单元测试中请求 HTTPS API 失败. 异常 Result StackTrace: at System.Web.Services.Protocols.WebClientProtocol. ...