Foxtable(狐表)用户栏目专家坐堂 → 统计不重复值计数


  共有3978人关注过本帖树形打印复制链接

主题:统计不重复值计数

帅哥哟,离线,有人找我吗?
fubblyc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
统计不重复值计数  发帖心情 Post By:2016/10/28 10:45:00 [显示全部帖子]

因为foxtable自带的统计功能不能统计 不重复的计数值,

所以想这样做:

 

一个订单明细视图,想增加一个列,用来写单数:


图片点击可在新窗口打开查看此主题相关图片如下:单数.png
图片点击可在新窗口打开查看

 

类似与excel表格的if函数,如果和上一行一样,就写0,不一样,就写1.

在sql能实现吗?


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/10/29 11:50:00 [显示全部帖子]

可以了,谢谢 有点蓝  老师!!


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/11/14 10:04:00 [显示全部帖子]

SELEC T
[门店],
[单号],
_Identify,
case when ([单号] in (selec t [单号] from dbo.[销售明细] group by [单号] having count(*) > 1) and [_Identify] not in  (selec t min([_Identify]) from [单号] group by [单号] having count(*) > 1)) then 0 end as 单数

FROM
dbo.[销售明细]

 

提示错误:单号 对象名 无效


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20161114100538.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2016/11/14 10:06:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/11/14 10:49:00 [显示全部帖子]

靠,原来是这个低级错误。。。不好意思。。

 

这样是可以,但是加载速度超级慢。

 

用第一种的直接在 数据表 update 是不是会快一点。


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/11/14 10:58:00 [显示全部帖子]

好的,谢谢 有点蓝,有点色 老师!!

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/11/14 13:58:00 [显示全部帖子]

为什么如下代码需要执行两次才会有结果:

Dim cm d As New SQLCommand

cmd.commandtext = "updat e {销售明细} set 单数 = 1 where 单数 is null"
cmd.ExecuteNonQuery()
DataTables("销售明细").Load()

 

执行一次没有反应

[此贴子已经被作者于2016/11/14 14:01:17编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/11/14 22:12:00 [显示全部帖子]

还是不行。我采用先插入,再更新的方法。

Dim cm d As New SQLComman d
cm d.ConnectionNam e = "vip"
For Each dr As DataRow In DataTables("销售明细").DataRows
    cm d.CommandText =" insert into 销售明细(单号,销售时间) values ( '" & d r("单号") & "','" & d r("销售时间") & "')"
    cm d.ExecuteNonQuery()
Next

cm d.commandtext = "updat e 销售明细 s et 单数 = 1 wher e 单数 is null"
cm d.ExecuteNonQuery()

 

但这样好慢:

因为我们每天都要上传一次数据,这样每次都要从上百万条记录中找到   wher e 单数 is null   的才更新

 

 

我在想能不能在每天导入的数据里去 更新,每次也才几千条。这样会快点。

[此贴子已经被作者于2016/11/14 22:12:22编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/11/14 22:45:00 [显示全部帖子]

Dim cm d As New SQLComman d
cm d.ConnectionNam e = "vip"

cm d.commandtext = "updat e 销售明细 s et 单数 = 1 wher e 单数 is null"
cm d.ExecuteNonQuery()

 

我们每天都要插入一些数据,插入完了之后要update 单数 这个列的值,把没有更改的(null值)改为 1.

每次去更新,都好慢。好像是从整个数据表上百万条记录里去找的。

 

我的意思是每次在插入后先找出这些刚刚插入的 单数 is  null  的记录 ,每次也就五六千条。 找出来后,再update 为 1

 

或者在插入前,先把表的的 单数  的值给改成1 了,再 插入。

 

 

[此贴子已经被作者于2016/11/14 22:48:25编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/11/15 9:46:00 [显示全部帖子]

第二种方法没有起到作用,不知道是不是我的写法不对,更新两条记录需要这么长时间如图:


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20161115094154.png
图片点击可在新窗口打开查看

我试一下第1种方法

[此贴子已经被作者于2016/11/15 9:46:44编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/11/15 9:57:00 [显示全部帖子]

第一种方法:先在插入前的内部表更改好值,要得到如下效果


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20161115095126.png
图片点击可在新窗口打开查看

 

之前用updat e 的方法是:

cmd.commandtext = "updat e 销售明细 set 单数 = 0 where _Identify > " & val & " And 单号 In (Selec t 单号 from 销售明细 group by 单号 having count(*) > 1) And [_Identify] not In  (Selec t min([_Identify]) from 销售明细 group by 单号 having count(*) > 1) And 单数 Is null "
cmd.ExecuteNonQuery()

 

cmd.commandtext = "updat e 销售明细 set 单数 = 1 where _Identify > " & val & " and 单数 is null"
cmd.ExecuteNonQuery()

 

那在内部表要怎么做呢?用DataColChanged吗?

我之前也是用 updat e 内部表的方法,但是还要在Load出来然后再批量插入。Load出来,有一两万条数据的话就很慢。

 


 

[此贴子已经被作者于2016/11/15 9:57:43编辑过]

 回到顶部
总数 12 1 2 下一页