SQLSERVER去除某一列的重复值并显示所有数据\DISTINCT去重\ISNULL()求SUM()\NOT EXISTS的使用

进入正题,准备我们的测试数据

1.我们要筛选的数据为去除 GX 列的重复项 并将所有数据展示出来,如图所示:

1 select t.* from [PeopleCount] as t where t.procedureID=‘8334‘

2.这种情况下我们是不可以使用DISTINCT来去重的,我们可以来尝试一下:

  首先,单纯的查询 GX 这一列用 distinct 是没有任何问题的

1 select distinct t.GX from [PeopleCount] as t where t.procedureID=‘8334‘

  但是如果我们加上表中其它数据的话,我们来看看效果:

1 select distinct t.GX ,t.* from [PeopleCount] as t where t.procedureID=‘8334‘

  很显然,结果发现不是我们想要的数据。

3.这个时候我们既想要去重,又想要去重后的数据,我们可以这样:

1 select t.* from [PeopleCount] as t where t.procedureID=‘8334‘ and not exists
2     (select 1 from [PeopleCount] where GX=t.GX and countID>t.countID)

  这就是将GX过滤去重后查询到的所有数据了。

备注: ①.EXISTS (sql 返回结果集为真) NOT EXISTS(sql 不返回结果集为真(或返回结果集为假))

       ②.EXISTS表示存在量词:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”

    ③.相关子查询执行过程:先在外层查询中取“[PeopleCount]表”的第一行记录,用该记录的相关的属性值(在内层WHERE子句中给定的)处理内层查询,若外层的WHERE子句返回“TRUE”值,则这条记录放入结果表中。然后再取下一行记录;重复上述过程直到外层表的记录全部遍历一次为止。

       ④.EXISTS语句不关心子查询的具体内容,因此用“SELECT *”,“Exists + 子查询”用来判断该子查询是否返回记录。

       ⑤.Exists:若子查询的结果集非空时,返回“True”;若子查询的结果集为空时,返回“False” 。
                NOT EXISTS :若子查询结果为空,返回“TRUE”值;若子查询的结果集非空时,返回 “FALSE。

4.对查询到的结果(DJ列) 如果在不为空的情况下进行求和:

1 select
2 ISNULL((Select sum(DJ) as CountNum  FROM [PeopleCount] t WHERE type = 1 and t.procedureID=‘8334‘ and not exists
3 (select 1 from [PeopleCount] where GX=t.GX and countID>t.countID)),0)  as 求和结果

备注:①.isnull(参数1,参数2),判断参数1是否为NULL,如果是,返回参数2,否则返回参数1。

        ②.SUM()函数用于计算一组值或表达式的总和,SUM()函数的语法如下:SUM(DISTINCT expression)

  

到此结束,感谢各位~

原文地址:https://www.cnblogs.com/guozhaoxin/p/11888591.html

时间: 2024-10-03 05:27:04

SQLSERVER去除某一列的重复值并显示所有数据\DISTINCT去重\ISNULL()求SUM()\NOT EXISTS的使用的相关文章

oracle 查某一列有重复值的记录

-- 查找重复记录select names,num from test where rowid != (select max(rowid)                  from test b                 where b.names = test.names and                      b.num = test.num) 或者使用 select names,num from test where rownum!= (select max(rownum

ArrayList去除集合中字符串的重复值,只能在本集合内操作

/* * 需求:ArrayList去除集合中字符串的重复值,只能在本集合内操作 * * 分析: * 1.创建一个集合对象 * 2.添加多个字符串元素 * 3.用选择排序方法去比较 * A:如有相同的,则删除此元素 * B:没有,则保留 * 4.遍历输出 新集合 */ package com.ma.arraylist; import java.util.ArrayList; import java.util.Iterator; /** * ArrayList去除集合中字符串的重复值,只能在本集合内

【去除集合中字符串的重复值-2】

package com.yjf.esupplier.common.test; import java.util.ArrayList; import java.util.Iterator; /** * @author shusheng * @description 去除集合中字符串的重复值(字符串的内容相同) * @Email [email protected] * @date 2018/12/12 16:55 */ public class ArrayListDemo1 { public sta

【去除集合中字符串的重复值-1】

package com.yjf.esupplier.common.test; import java.util.ArrayList; import java.util.Iterator; /** * @author shusheng * @description 去除集合中字符串的重复值(字符串的内容相同) * @Email [email protected] * @date 2018/12/12 16:24 */ public class ArrayListDemo { /** * Array

删除单列和多列同时重复值

在生产环境中,遇到前端应用未能限制,导致单列出现重复值,亦或是多列同时重复这种情况,这两种情况都是不允许的,现在由于前端应用不好限制,要做删除操作后,添加唯一索引,从数据库层面进行限制,以下是处理过程: mysql> select * from aixuan1;+----+------+-------+| id | text | text1 |+----+------+-------+|  1 | aa   | 11    ||  2 | bb   | 22    ||  3 | cc   |

Sql server 多列去重复值,相同的只显示一条数据

CREATE TABLE #tp( headerNo VARCHAR(10), machineNO VARCHAR(10), descrption nVARCHAR(20), artNo VARCHAR(20), qty INT , repartno varchar(20) , repqty INT) insert INTO #tp SELECT 'HD01','0101520',N'电池出问题','102020',2,'102020',2insert INTO #tp SELECT 'HD01

去除DataTable指定列的重复行

DataTable dt = ds.Tables[0]; //获得 datatable DataView dv = new DataView(dt); DataTable dt2 = dv.ToTable(true, "GongXu"); // 去重,只针对 GongXu 字段 原文地址:https://www.cnblogs.com/ly1686/p/9228232.html

【去除集合中字符串的重复值-3】

package com.yjf.esupplier.common.test; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; /** * @author shusheng * @description * @Email [email protected] * @date 2018/12/12 17:11 */ public class ArrayListDemo2 { public

去除列中的重复值

CSV中原内容: 要求去除A列中的重复字段,去除后如下: 代码如下: 1 $dd = import-csv d:\disks.csv 2 #通过倒序方法去除列中重复值 3 for ($i=$dd.count-1;$i -ge 0;$i--) 4 { 5 $previous = $dd[$i-1].Server 6 $current = $dd[$i].Server 7 If ($current -eq $previous) 8 { 9 $dd[$i].Server = "" 10 }