sum-SQL语句distinct把case when then 把相同的数据给去掉了

问题描述

SQL语句distinct把case when then 把相同的数据给去掉了

我SQL语句是这样的 sum(distinct case when e.ifxydw='1' and a.delstate ='0' then b.money else null end) as Xysr, 也碰到了跟上面一样的问题,b.money只要数据相同他就把我的给去掉了,这样我改怎么解决?求大神指教

解决方案

把条件是e.ifxydw='1' and a.delstate ='0' 查出来后SUM一下就不行了。
select sum(money) as Xysr from table where e.ifxydw='1' and a.delstate ='0'

解决方案二:

整段SQL语句就是这样的 select a.jhrq Jhrq, count(distinct case when a.viproomtypeid !='0' and a.delstate ='0' then a.id else 0 end) as YtCount,
count (distinct case when a.PaymentId ='1004' or a.PaymentId ='1005' and a.delstate ='0' then a.id else null end)as CashCount,
sum(distinct case when a.delstate ='0' and b.paymentid='1004' or b.paymentid='1005' then b.money else 0 end ) as Xjsr,
count(distinct case when b.itemsid = '1033' and b.price='400' and a.delstate ='0' and b.paymentid='1004' or b.paymentid='1005' then a.id else null end )as Xjxt,
count(distinct case when b.itemsid = '1033' and b.price='800' and a.delstate ='0' and b.paymentid='1004' or b.paymentid='1005' then a.id else null end )as Xt,
count(distinct case when b.itemsid = '1037' and b.price='750' and a.delstate ='0' and b.paymentid='1004' or b.paymentid='1005' then a.id else null end )as Xjdt,
count(distinct case when b.itemsid = '1037' and b.price='1500' and a.delstate ='0' and b.paymentid='1004' or b.paymentid='1005' then a.id else null end )as Dt,
sum(distinct case when b.itemsid = '1036' and a.delstate ='0' and b.paymentid='1004' or b.paymentid='1005' then b.money else 0 end) as PackMoney,
sum(distinct case when b.itemsid = '1034' and a.delstate ='0' and b.paymentid='1004' or b.paymentid='1005' then b.money else 0 end )as Lead,
count(distinct case when e.ifxydw='1' and a.delstate ='0' and a.webusersubid = c.id then a.id else null end) as XyCount,
sum(distinct case when e.ifxydw='1' and a.delstate ='0' then b.money else null end) as Xysr,
count(distinct case when b.itemsid = '1033' and a.delstate ='0' and b.price='400' and e.ifxydw='1' then a.id else null end )as Xydzxt,
count(distinct case when b.itemsid = '1033' and a.delstate ='0' and b.price='800' and e.ifxydw='1' then a.id else null end )as Xyxt,
count(distinct case when b.itemsid = '1037' and a.delstate ='0' and b.price='750' and e.ifxydw='1' then a.id else null end )as Xydzdt,
count(distinct case when b.itemsid = '1037' and a.delstate ='0' and b.price='1500' and e.ifxydw='1' then a.id else null end )as Xydt,
sum(distinct case when b.itemsid = '1036' and a.delstate ='0' and e.ifxydw='1' then b.money else 0 end) as XyPackMoney,
sum(distinct case when b.itemsid = '1034' and a.delstate ='0' and e.ifxydw='1' then b.money else 0 end )as XyLead,
count(distinct case when d.customerlevelid='1001' or d.customerlevelid='1002' and a.webuserid = d.webuserid and d.delstate='0' then a.id else null end)as VipCount,
count(distinct case when d.customerlevelid='1003' and a.webuserid = d.webuserid and d.delstate='0' then a.id else null end)as CipCount,
count(distinct case when a.hadtypeid='1010' and a.delstate='0' then a.id else null end ) as YhCount,
count(distinct case when a.delstate='0' then a.id else null end) as SumCount
from ml_serviceorder a left join ML_OrderItems b on a.id=b.orderid left join ml_webusersub c on a.webusersubid = c.id
left join ML_Customer d on a.webuserid = d.webuserid left join ML_webuser e on c.webuserid = e.id group by a.jhrq
Order by a.Jhrq desc

解决方案三:

这SQL效率得成什么样呢。
用union的方式。
每个字段都是一个子句。

解决方案四:

既然取sum,为什么还有distinct呢,或者用group by 呢

解决方案五:

distinct 去掉重复的数据,你又不要去掉,你到底要哪样。

贴出完整的sql
完整的数据
以及你希望的结果

解决方案六:

好比我数据库的数据是这样的
ID money
01 100
02 100
因为我是多表连查,所以在查出来的时候相同的数据会出来几次,我就用了distinct,但用distinct会把求money的总和的时候他会把相同的数据去掉,
求和求出来就只有100了,这个怎么解决?求大神指教一下呀

解决方案七:

你关联多表,又不想加WHERE语句防止某些关联表中不符合条件的记录不出来,那么你把条件加到JOIN的ON里面。
如果你的查询不是非常长的话,可以贴出来,说明一下是数据库类型和意图,方便提供解决方案。

解决方案八:

就是对数据进行统计,有多张表关联的,我本来是用distinct把相同数据去掉,结果是把所有相同的数据都给去掉了
就好比这样的表
ID money
01 100
02 100

这是两条数据,多表联查这两条数据就会出来多次,然后我是想要把其他出来的次数给去了,而不是要money下面有两条相同的数据就去掉一个

解决方案九:

distinct 就是取“不同的”,既然不符合你的要求,那就不用就是了
多对多的统计时,应先做预查询以排除干扰

时间: 2024-09-22 18:27:57

sum-SQL语句distinct把case when then 把相同的数据给去掉了的相关文章

Sql语句把一个表的某几列的数据存到另一个表里的方法

原文地址:sql语句把一个表的某几列的数据存到另一个表里的方法作者:星星月亮 一.如何用slq语句把一个表中的某几个字段的数据插入到另一个新表中,就要用下面这条slq语句:     insert into 表名1(字段1,字段2) select 字段1,字段2 from 表名2 这里有一点值得注意的是这2个字段要一一对应,并且按顺序. 二.如果另一个表是已经有数据的表,只希望更改其中的一列或几列的话,则用下面的sql语句:    update 表名1,表名2 set 表名1.字段1 = 表名2.

SQL语句中的case when语法以及Oracle中的类似方法

一.基本概念和例子 case when是sql语句的语法,而不是属于特定数据库的语言 方法一: select num,name, (case classnowhen '1' then '一班'when '2' then '二班'else '其他班级' end) as classname from student 方法二: select num,name, (case when classno = '1' then '一班'when classno = '2' then '二班'else '其他班

sql语句 #-在VS2010中如何使用ADO.net更新数据操作

问题描述 在VS2010中如何使用ADO.net更新数据操作 我想把数据库中的某一表中的int型的变量取出来,然后进行自减操作,然后再存到数据 库中,具体的C#语句该怎么写呢? 解决方案 SqlConnection conn = new SqlConnection(连接字符串); conn.Open(); SqlCommand cmd = new SqlCommand("update 表名 set 字段=字段+1 where id = xxx", conn); cmd.ExecuteS

SQL SELECT DISTINCT 语句

本章讲解 SELECT DISTINCT 语句. SQL SELECT DISTINCT 语句 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值. 语法: SELECT DISTINCT 列名称 FROM 表名称 使用 DISTINCT 关键词 如果要从 "Company" 列中选取所有的值,我们需要使用 SELECT 语句: SELECT Company FROM Orders &quo

小结Oracle中SQl语句优化注意事项

具体要注意的: 1.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描.优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行.

手把手教你在ASP中使用SQL语句

sql|语句 五花八门的SQL产品多得要命,或许你早顾不得其它甩开袖子就动手干了.但你要同时采用ASP和SQL的话就可能会头晕.MySQL.SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL语句.不过,你可以利用自己掌握的Access知识以及相应的Access技能,再加上我们的提示和技巧,相信一定能成功地在你的ASP网页中加入SQL. 1. SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直接采用

ASP初学者:教你使用使用SQL语句

sql|初学|语句 五花八门的SQL产品多得要命,或许你早顾不得其它甩开袖子就动手干了.但你要同时采用ASP和SQL的话就可能会头晕.MySQL.SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL语句.不过,你可以利用自己掌握的Access知识以及相应的Access技能,再加上我们的提示和技巧,相信一定能成功地在你的ASP网页中加入SQL. 1. SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直

ASP中使用SQL语句教程

 1. SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了.在数据库工具下直接采用SQL的时候很多人都会熟悉下面的操作:SELECT whatFROM whichTableWHERE criteria 执行以上语句就会创建一个存放其结果的查询. 而在ASP页面文件上,你也可以采用以上的一般语法,不过情况稍微不同,ASP编程的时候,SELECT 语句的内容要作为字符串赋给一个变量: SQL = "SELECT what FROM whichTable WHERE crit

asp中sql语句使用教程(二)

6. 存储查询 当你的查询相对简单的时候,每次从头开始创建SQL语句也不费什么工夫,不过,复杂的查询就不同了,每次都从头来会产生很多开发错误.因此,一旦让SQL顺利地运行起来,你最好把它们存起来,在需要时再调用它们.这样,哪怕是一个简单查询你都能随时用上存储的查询语句了. 假设你每周都要给团队做一次报告,指出目前存在的业务支持问题,这些数据需要从你的数据库中选取,而且要按照日期选择记录,同时根据你所在团队所采用的支持问题的类别排序.一旦你设计了这一查询,你何必以后每周都重新编写一次呢?不要在你的