建表sql

CREATE TABLE `tbl_demo` (
`id` varchar(255) COLLATE utf8_bin NOT NULL,
`payer_name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
`amount` int(255) DEFAULT NULL,
`value_day` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

需求

   =======》

将图一的数据库中数据按图二规则显示在页面上。

场景:

图一数据是excel导入,所以有可能出现一条数据重复导入的现象,所以要将payerName,amout,valueDay三个字段存在重复的数据挑出来放在一起标红显示,让管理员知道这些数据可能重复 ,然后线下校对进行处理。

技术要求:

首先要对所有数据根据这三个字段进行分组显示,对valueDay降序排序,明确哪条数据存在重复

实现分组显示并且排序

1.group by(mysql)实现:

SELECT
*
FROM
tbl_demo AS demo
GROUP BY
demo.value_day,
demo.amount,
demo.payer_name,
demo.id
ORDER BY
demo.value_day DESC

测试发现,mysql数据库可以用group by简单实现分组显示,但是相同的sql在sql server上却无法实现。

参考

2.order by实现:

SELECT
*
FROM
tbl_demo AS demo
ORDER BY
demo.value_day DESC,
demo.amount,
demo.payer_name,
demo.id

tips:order by多字段其实可以理解为将多字段拼接之后进行排序,完全可以实现分组显示,个人觉得比group by还要容易理解一些。

实现明确哪条数据重复

实现逻辑:

先用上面的sql查出所有数据,然后在sql中对查出的每条数据做一个子查询,查找当前数据在表中是否有重复数据。

SELECT
*,
CASE WHEN (
SELECT
count( * )
FROM
tbl_demo AS d
WHERE
d.value_day = demo.value_day
AND d.amount = demo.amount
AND d.payer_name = demo.payer_name
) > 1 THEN
'重复' ELSE '未重复'
END AS repeatFlag
FROM
tbl_demo AS demo
ORDER BY
demo.value_day DESC,
demo.amount,
demo.payer_name,
demo.id

tips:对于这个实现方式我没有想到更好的方式,感觉有点耗性能,哪位大佬有更好的方式可以留言告诉我。

sql多字段分组排序显示全部数据的更多相关文章

  1. Sql按照字段分组,选取其他字段最值所在的行记录

    引言: 为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录. 参考:红黑联盟 所用到的数 ...

  2. SQL char字段类型排序

    我是做的ACCESS时候需要对字段的值进行排序,字段格式是char类型的,但是存的值是数字.现在需要对该字段进行排序. 通过查找,找到以下两种方法,记录下来. 1. 你可以转换成int型再排序 sel ...

  3. SQL 对结果集进行分组排序过滤重复数据

    简单的表操作: select row_number() over(partition by A.gid order by A.gid ) as RowN, A.* from Fit_Order A 关 ...

  4. oracle 根据字段分组取第一条数据及rank函数说明

    当前有这样一个需求,根据外键对子表数据进行分组,取每组中的一条数据就行了,如图: 如:COMMANDID = 26的有两条,只取一条数据. sql语句: select * from(select SY ...

  5. Linux sort 多字段分组排序

    常用参数: -t: 指定分隔符 -k: 指定域 -u: 去除重复行 -n: 以数值排序 -r: 降序排序 (sort默认的排序方式是升序) -o: 结果重定向输出到文件 1.源文件: # cat hh ...

  6. SQL SERVER 实现分组合并实现列数据拼接

    需求场景: SQL SERVER 中组织的数据结构是一个层级关系,现在需要抓出每个组织节点以上的全部组织信息,数据示例如下: ADOrg_ID--------------ParentID------- ...

  7. TP多条件sql查询,分组排序

    $k=M('order a'); $bj=$k->join("left join __CHANGE__ b on b.tb_name='order'and a.order_id=b.t ...

  8. 利用FOR XML PATH行转列(根据某字段分组,多行数据转成一行,并用逗号隔开)

    CREATE TABLE #TEST(A VARCHAR(10) NULL,B VARCHAR(MAX) NULL) INSERT INTO #TESTSELECT 'A','A001'UNION A ...

  9. SQL分组排序后取每组最新一条数据的另一种思路

    在hibernate框架和mysql.oracle两种数据库兼容的项目中实现查询每个id最新更新的一条数据. 之前工作中一直用的mybatis+oracle数据库这种,一般写这类分组排序取每组最新一条 ...

随机推荐

  1. 介绍Netty

    介绍Netty 概述 Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务 ...

  2. 死磕mysql(4)

    想把论坛和博客上所有关于mysql的都看一遍,死磕到底 看到关于数据库快照的东西.......不懂,百度......然后就跑题了,看到了表锁这种东西unlock tables; 用来锁定表..... ...

  3. fgets汉字问题

    #include<stdio.h> #include <stdlib.h> #define N 10 int main(int argc, char *argv[]) { FI ...

  4. remote: error: hook declined to update refs/heads

    打开工程目录下.git/config文件,补充user信息 , [user] username = xxx email = xxx@126.com 打开工程目录下.git/description文件, ...

  5. c语言小游戏-三子棋的完成

    三子棋的实现 一.实现思路 1.初始化数组 三子棋是九宫格的格式,所以用二维数组接收数据.用‘O’代表电脑下的子,‘X’代表玩家下的子.未下子的时候初始化 ’ ‘(space).则二维数组为“char ...

  6. c++ 中数组的引用

    在C++里,数组也是可以引用的. 代码如下: char str1[] = "abcde"; ] = str1; 解读第二句代码,括号的优先级最高,'str2'首先与'&'相 ...

  7. 【C++】C++程序链接失败,无法解析的外部命令,无法解析的外部符号 "private: static class * Object::current"

    C++程序编译结束后,出现链接失败提示: 严重性    代码    说明    项目    文件    行    类别    禁止显示状态错误    LNK2001    无法解析的外部符号 &quo ...

  8. 前端jQuery日历控件报错 $("#datepicker").datepicker is not a function

    使用日历控件时,前端产生错误: $("#datepicker").datepicker is not a function 问题原因 前端在同一个页面,jQuery引入了两次. 解 ...

  9. kubernetes(14):k8s基于NFS部署storageclass实现pv自动供给

    k8s基于NFS部署storageclass实现pv自动供给 https://www.cnblogs.com/Smbands/p/11059843.html https://www.jianshu.c ...

  10. 大文件切割(split)

    split提供两种方式对文件进行切割: 根据行数切割,通过-l参数指定需要切割的行数 根据大小切割,通过-b参数指定需要切割的大小 1.1 根据行数切割 如下以一个3.4G大小的日志文件做切割演示,每 ...