Sql:多行合并一行以及多条数据取时间最早的那条
2016-11-01 20:24
309 查看
有两个导数据的需求,
1、一张表里面每一个订单号可能对应多条数据,每个单号返回时间最早的那条。
2、根据条件查询某个字段并按照逗号,合并在一起。
表类似结构如下:
![](https://images2015.cnblogs.com/blog/425300/201702/425300-20170207165258838-261902373.jpg)
第一条sql:
select c.Id,c.OrderNum, c.CreateTime FROM (select t.*,row_number() over(partition by t.OrderNum order by t.CreateTime ) rn from Payinfo t WHERE t.OrderNum IN('20160906025229','20160905006031','20160905016570')) c WHERE rn = 1;
执行效果如下:
![](https://images2015.cnblogs.com/blog/425300/201702/425300-20170207165305119-725436338.jpg)
主要知识点:over partition by
over partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,常用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组 。
Group by 与 over partition by都可以实现分组统计功能.
Group by 根据一列或者多列的值或表达式将选定的行进行一个摘要分组,每一个分组只返回一行。
第二条sql:
SELECT TOP 1 data=STUFF((SELECT ','+ CAST(id AS VARCHAR(10)) FROM Payinfo t WHERE OrderNum IN('20160906025229','20160905006031') FOR XML PATH('')), 1, 1, '')
FROM Payinfo t1
执行效果如下:
![](https://images2015.cnblogs.com/blog/425300/201611/425300-20161101202426299-995577338.jpg)
主要知识点:FOR XML PATH
将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。
有关FOR XML PATH更多知识,我觉得下面这篇文章讲的很好:
灵活运用 SQL SERVER FOR XML PATH
1、一张表里面每一个订单号可能对应多条数据,每个单号返回时间最早的那条。
2、根据条件查询某个字段并按照逗号,合并在一起。
表类似结构如下:
![](https://images2015.cnblogs.com/blog/425300/201702/425300-20170207165258838-261902373.jpg)
第一条sql:
select c.Id,c.OrderNum, c.CreateTime FROM (select t.*,row_number() over(partition by t.OrderNum order by t.CreateTime ) rn from Payinfo t WHERE t.OrderNum IN('20160906025229','20160905006031','20160905016570')) c WHERE rn = 1;
执行效果如下:
![](https://images2015.cnblogs.com/blog/425300/201702/425300-20170207165305119-725436338.jpg)
主要知识点:over partition by
over partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,常用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组 。
Group by 与 over partition by都可以实现分组统计功能.
Group by 根据一列或者多列的值或表达式将选定的行进行一个摘要分组,每一个分组只返回一行。
第二条sql:
SELECT TOP 1 data=STUFF((SELECT ','+ CAST(id AS VARCHAR(10)) FROM Payinfo t WHERE OrderNum IN('20160906025229','20160905006031') FOR XML PATH('')), 1, 1, '')
FROM Payinfo t1
执行效果如下:
![](https://images2015.cnblogs.com/blog/425300/201611/425300-20161101202426299-995577338.jpg)
主要知识点:FOR XML PATH
将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。
有关FOR XML PATH更多知识,我觉得下面这篇文章讲的很好:
灵活运用 SQL SERVER FOR XML PATH
相关文章推荐
- Oracle按时间分组统计的sql与oracle 多行合并一行
- SQL 将一列多行数据合并为一行 FOR XML PATH
- SQL Sever中使用SQL语句实现把重复行数据合并为一行并用逗号分隔
- sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果
- filebeat - logstash 多行合并 解决数据丢失以及无法读取最后一行
- T-SQL中多行数据合并到一行(note)
- ORACLE 多列合并成一行数据 WM_CONCAT函数以及REPLACE
- sql里将重复行数据合并为一行,数据用逗号分隔
- T_SQL 将一列多行数据合并为一行
- sql里将重复行数据合并为一行,数据用逗号分隔(张高伟)
- sql里将重复行数据合并为一行,数据用逗号分隔
- T_SQL 将一列多行数据合并为一行
- sql里将重复行数据合并为一行,数据用逗号分隔
- MySQL两行数据合并一行sql
- SQL数据多行合并成一行多列
- sql里将重复行数据合并为一行,数据用逗号分隔
- SQL合并统一数据(相同的在一行显示)
- T_SQL 将一列多行数据合并为一行
- sql将几张表的数据合并到一张表里面一行显示
- sql里将重复行数据合并为一行,数据用逗号分隔