以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]SQL取自己表的列不重复数据  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=144532)

--  作者:2900819580
--  发布时间:2019/12/23 20:27:00
--  [求助]SQL取自己表的列不重复数据

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编辑过]

--  作者:有点蓝
--  发布时间:2019/12/23 20:32:00
--  
如果取不重复单号这样就可以:Sel ect DISTINCT 排产单号 from {订单表视图} where 排产单号 is not null

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

--  作者:2900819580
--  发布时间:2019/12/23 20:40:00
--  


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

 

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


--  作者:程序猿
--  发布时间:2019/12/23 20:49:00
--  
是想以数据组的方式显示 ,还是怎么显示,如:xxx,xxx,xxx在单元格上显示 ?
--  作者:有点蓝
--  发布时间: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
--  发布时间: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
--  发布时间:2019/12/24 10:58:00
--  

顶一下


--  作者:有点蓝
--  发布时间: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
--  发布时间: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 {订单表视图}  "


--  作者:有点蓝
--  发布时间:2019/12/24 11:37:00
--  
for xml path这种用法确实比较慢,虽然最后得出294条,但是却需要从这个视图里涉及到的表的所有数据里去查询,拼接得到这294条记录,这个过程慢,这些表数据越多就越慢。

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