Foxtable(狐表)用户栏目专家坐堂 → [求助]SQL取自己表的列不重复数据


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

主题:[求助]SQL取自己表的列不重复数据

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


加好友 发短信
等级:六尾狐 帖子:1309 积分:9507 威望:0 精华:0 注册:2015/6/30 8:46:00
[求助]SQL取自己表的列不重复数据  发帖心情 Post By:2019/12/23 20:27:00 [只看该作者]

Dim cmd As new SQLCommand
Dim Sqldt As DataTable
cmd.C
cmd.CommandText = "Sele ct b.*,(Sel ect DISTINCT 排产单号 from {订单表视图} as a where a.物料内码 = b.物料内码 and a.排产单号 is not null) as 旧单单号"
cmd.CommandText &= " from {订单表视图} as b "

 

 

老师,以上红色这段代码要怎么样修改才能用

 

想实现的目标,在订单表视图里找到物料内码历史上的曾经下过的订单。

[此贴子已经被作者于2019/12/23 20:29:05编辑过]

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/23 20:32:00 [只看该作者]

如果取不重复单号这样就可以:Sel ect DISTINCT 排产单号 from {订单表视图} where 排产单号 is not null

如果还要取其它数据,假设有2行重复的单号,取哪个单号的数据?这个视图数据是怎么样的?截图看看

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


加好友 发短信
等级:六尾狐 帖子:1309 积分:9507 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2019/12/23 20:40:00 [只看该作者]


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

 

老师,数据如上所示,我想实现的内容是,接到新的订单,在订单视图表里找相同的物料内码,并且将它显示在旧单单号上。


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


加好友 发短信
等级:幼狐 帖子:115 积分:1064 威望:0 精华:0 注册:2019/10/31 15:02:00
  发帖心情 Post By:2019/12/23 20:49:00 [只看该作者]

是想以数据组的方式显示 ,还是怎么显示,如:xxx,xxx,xxx在单元格上显示 ?

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/23 20:50:00 [只看该作者]

试试,如果不行导出部分数据测试

"Select b.*,(Select ',' +  排产单号 from {订单表视图} as a where a.物料内码 = b.物料内码 and a.排产单号 is not null for xml path('')) as 旧单单号"

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


加好友 发短信
等级:六尾狐 帖子:1309 积分:9507 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2019/12/23 21:25:00 [只看该作者]

以下是引用有点蓝在2019/12/23 20:50:00的发言:
试试,如果不行导出部分数据测试

"Select b.*,(Select ',' +  排产单号 from {订单表视图} as a where a.物料内码 = b.物料内码 and a.排产单号 is not null for xml path('')) as 旧单单号"

 

老师,可以正常显示,但不明白原理,能说明一下,或给个学习的网页连接,谢谢

 

另外,数据加载比较慢。速度有没有办法优化一下,测试的数据只有294行,如果再多可能就会有假死的状态了。

 


此主题相关图片如下:无标题1.png
按此在新窗口浏览图片

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


加好友 发短信
等级:六尾狐 帖子:1309 积分:9507 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2019/12/24 10:58:00 [只看该作者]

顶一下


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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/24 11:05:00 [只看该作者]

百度“for xml path

加载慢,一般是表达式计算,或者是事件代码影响了:http://www.foxtable.com/webhelp/topics/1935.htmhttp://www.foxtable.com/webhelp/topics/2218.htm

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


加好友 发短信
等级:六尾狐 帖子:1309 积分:9507 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2019/12/24 11:32:00 [只看该作者]

Dim cmd As new SQLCommand
Dim Sqldt As DataTable
cmd.C
cmd.CommandText = "Select b.*,(Select ',' +  排产单号 from {订单表视图} as a where a.物料内码 = b.物料内码 and a.排产单号 is not null for xml path('')) as 旧单单号"
cmd.CommandText &= " from {订单表视图} as b "

 

以上代码10秒,以下代码2.7秒,没有事件,目前加载294条就10秒多了。

 

Dim cmd As new SQLCommand
Dim Sqldt As DataTable
cmd.C
cmd.CommandText = "Select * from {订单表视图}  "


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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/24 11:37:00 [只看该作者]

for xml path这种用法确实比较慢,虽然最后得出294条,但是却需要从这个视图里涉及到的表的所有数据里去查询,拼接得到这294条记录,这个过程慢,这些表数据越多就越慢。

或者把这些表的数据发上来测试一下看看有没有其它方法

 回到顶部