c# winform 求个方法..数据筛选 来者有分

wy811007 2011-01-27 12:19:11
一个表 a表 有一列tt
一个表 b表 t1 t2两列
t1不为空取t1,t1为空取t2
然后筛选
如果这列开头是022,则从第四位向后取六位
如果无前缀的从第一位向后取六位
然后这六位和a表那列的数比对,相同就将b表这行数据插入一个新表
最后导出这个新表

这个过程方法应该怎么写呢.. 数据量很大 3W行 请考虑运行速度的情况下弄...
之前的csv文件读取和插入数据库就搞的我很头疼了..
话说 插入方法还是挺郁闷 我考虑想弄个进度条来做 但是还没弄 悲剧啊..
太纠结了 技术不给力 求大伙帮忙 谢谢了
...全文
276 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿非 2011-11-23
  • 打赏
  • 举报
回复
wy811007 2011-11-23
  • 打赏
  • 举报
回复
o(︶︿︶)o 唉 尼玛j8 boss 收完人家预付的钱 我给写了个半成品就给人家了 木有做细致的筛选.
反正我也离开了 但是尼玛倒霉boss竟然这个项目没给我money.. 屮啊..
现在结贴了 回答的都有分
wy811007 2011-02-08
  • 打赏
  • 举报
回复
怎么没人来帮忙了.
龍过鸡年 2011-01-29
  • 打赏
  • 举报
回复
access 是 Left Mid Right
libolei 2011-01-29
  • 打赏
  • 举报
回复
这个得测试....
  • 打赏
  • 举报
回复
参考这个吧,应该是刚写好的,调试一下可以用。
[Quote=引用 8 楼 qqamoon 的回复:]
SQL code

SELECT a.tt, nb.nt
FROM a INNER JOIN
(
SELECT (CASE SUBSTRING(ISNULL(t1, '') + t2, 1, 3)
WHEN '022' THEN SUBSTRING(ISNULL(t1, '') + t2, 4, 6)
ELSE SUBSTRING(ISNU……
[/Quote]
枪牌 2011-01-29
  • 打赏
  • 举报
回复
哥的软件每天100多万条记录,相关页面显示XX图
感叹下
LutzMark 2011-01-28
  • 打赏
  • 举报
回复
用Linq to SQL的解决方案吧
zhushoudong 2011-01-28
  • 打赏
  • 举报
回复
个人觉得access的更好做的吧,还本地的,速度就快多了
wy811007 2011-01-28
  • 打赏
  • 举报
回复
SELECT SUBSTR(phone,4,10) FROM b表 WHERE SUBSTR(phone,1,3)='022'

这个是我朋友给我写的一个 sql的
maycxd 2011-01-28
  • 打赏
  • 举报
回复
路过蹭分~!

wy811007 2011-01-28
  • 打赏
  • 举报
回复
昨天不要意思 忘记来了 是access的数据库. 话说不知道有没字符串截取函数.
貌似sql的是substr..
wulinshe 2011-01-28
  • 打赏
  • 举报
回复
看到后面四个字,必须得来
sxiaohui8709253 2011-01-27
  • 打赏
  • 举报
回复

if object_id('a表') is not null
drop table a表
create table a表(tt varchar(6)) --a表
insert into a表 select '123456' union all
select '234567' union all
select '345678' union all
select '456789'


if object_id('b表') is not null
drop table b表
create table b表(t1 varchar(50),t2 varchar(50)) --b表
insert into b表 select '022123456',null union all
select null,'022234567' union all
select '033345678',null union all
select null,'044456789'

if object_id('新表') is not null
drop table 新表
create table 新表(tt varchar(6)) --新表

delete from 新表

--插入语句
insert into 新表
select t4.tt from a表 inner join
(select case when charindex('022',t)=1 then substring(t,4,6) else substring(t,1,6) end as tt
from
(select case when t1 is null then t2 when t2 is null then t1 end as t from b表)t3)t4
on a表.tt=t4.tt

select * from 新表 --查看结果

--结果
--tt
123456
234567
小D2013 2011-01-27
  • 打赏
  • 举报
回复
靠,好复杂
yanele 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qqamoon 的回复:]
SQL code

SELECT a.tt, nb.nt
FROM a INNER JOIN
(
SELECT (CASE SUBSTRING(ISNULL(t1, '') + t2, 1, 3)
WHEN '022' THEN SUBSTRING(ISNULL(t1, '') + t2, 4, 6)
ELSE SUBSTRING(ISNU……
[/Quote]
这个给力!
q461714878 2011-01-27
  • 打赏
  • 举报
回复
3W行叫大吗。小菜
龍过鸡年 2011-01-27
  • 打赏
  • 举报
回复

SELECT a.tt, nb.nt
FROM a INNER JOIN
(
SELECT (CASE SUBSTRING(ISNULL(t1, '') + t2, 1, 3)
WHEN '022' THEN SUBSTRING(ISNULL(t1, '') + t2, 4, 6)
ELSE SUBSTRING(ISNULL(t1, '') + t2, 1, 6) END) AS nt
FROM b
) AS nb ON a.tt = nb.nt
clairelss 2011-01-27
  • 打赏
  • 举报
回复
存到dataset里面,然后根据条件一条条分析判断,进度条也可以做的,count总数为进度条的Max值,当前循环行为value值
hinada99 2011-01-27
  • 打赏
  • 举报
回复
路过帮忙顶
分给解决人
加载更多回复(2)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧