以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  SQL数据重新排序问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=69925)

--  作者:jaegea
--  发布时间:2015/6/12 19:19:00
--  SQL数据重新排序问题

有数据如下

列名:列1,列2,列3,列4,列5

行1值:a1,a2,a3,a4,a5

行2值:b1,b2,b3,b4,b5

行3值:c1,c2,c3,c4,c5

用SQL语句采用事务方式重新进行排序,但结果不对

Di m c n1 A s C onnection = Con nections("数据源")   \'获取数据库连接
Di m c n A s New S ystem.D ata.O leDb.O leDbConnection(cn1.ConnectionString)
Di m c m d A s new S ystem.Da t a.OleDb.O leD bCommand
c n.O pe n()
cmd.C onnection = c n
t ry
    cm d.T ransaction = cn.B eginTransaction()   \'开始事务

        Di m cm d1 a s Ne w SQL Command

        cmd1.Co mmand Text = "Up date {表A} Set [列1]=\'b1\' Where [列1] = \'a1\'"

        cmd1.E xecuteNonQuery()

        Di m cm d2 a s Ne w SQL Command

        cmd2.C ommand Text = "Up date {表A} Set [列1]=\'c1\' Where [列1] = \'b1\'"

        cmd2.E xecuteNonQuery()

        Di m cm d3 a s Ne w SQ LCommand

        cmd3.C ommand Text = "Up date {表A} Set [列1]=\'a1\' Where [列1] = \'c1\'"

        cmd3.E xecu teNonQuery()
    cm d.T rans action.Commit() 

    cmd.D ispose()    
    cn.C lose()       
    Retu rn True
Ca tch ex As E xception
    cmd.T ransaction.Rollback()

    m sg box(ex.tostring)

    cm d.D ispose()  
    cn.Cl ose()      

    Ret urn False
E n d Try

 

怎样才能对数据列1重新排序?

按以上方法会产生列1中出现重复值而不是重新排序


--  作者:jaegea
--  发布时间:2015/6/13 8:03:00
--  
没人在呀?
--  作者:jaegea
--  发布时间:2015/6/13 11:55:00
--  
各位版主來救救
--  作者:jaegea
--  发布时间:2015/6/13 13:37:00
--  
沒人理我……
--  作者:Bin
--  发布时间:2015/6/13 14:33:00
--  
你想做什么.没看懂
--  作者:游
--  发布时间:2015/6/13 14:34:00
--  
你这不就是修改数据吗

和你说得排序没有关系

--  作者:jaegea
--  发布时间:2015/6/13 16:31:00
--  

就是对列1重新排序,其它数据不变,将所有列1的值等于a1的数据改为b1,将所有列1所有值等于b1的值改为c1,将所有列1值等于c1的值改为a1,就是列2,列3,列4其它列的所有数据不变,单单对列1的数据进行对调更改

        Di m cm d1 a s Ne w SQL Command

        cmd1.Co mmand Text = "Up date {表A} Set [列1]=\'b1\' Where [列1] = \'a1\'"

        cmd1.E xecuteNonQuery()

        Di m cm d2 a s Ne w SQL Command

        cmd2.C ommand Text = "Up date {表A} Set [列1]=\'c1\' Where [列1] = \'b1\'"

        cmd2.E xecuteNonQuery()

        Di m cm d3 a s Ne w SQ LCommand

        cmd3.C ommand Text = "Up date {表A} Set [列1]=\'a1\' Where [列1] = \'c1\'"

        cmd3.E xecu teNonQuery()


--  作者:jaegea
--  发布时间:2015/6/13 16:35:00
--  
现在产生的结果是,因为第一条命令已经将列1的值为a1的改成了b1,第二条命令将所有b1值改为了c1,第三条命令将所有c1值改为了a1,最后所有列1的值都变成了a1了,而不是对调
[此贴子已经被作者于2015/6/13 16:35:00编辑过]

--  作者:yinyb36
--  发布时间:2015/6/14 9:53:00
--  

       Di m cm d a s Ne w SQL Command

        cmd.Co mmand Text = "Up date {表A} Set [列1]=\'临时\' Where [列1] = \'a1\'"

        cmd.E xecuteNonQuery()

        cmd.C ommand Text = "Up date {表A} Set [列1]=\'a1\' Where [列1] = \'b1\'"

        cmd.E xecu teNonQuery()

         cmd.C ommand Text = "Up date {表A} Set [列1]=\'b1\' Where [列1] = \'c1\'"

        cmd.E xecuteNonQuery()

        cmd.Co mmand Text = "Up date {表A} Set [列1]=\'a1\' Where [列1] = \'临时\'"

        cmd.E xecuteNonQuery()

[此贴子已经被作者于2015/6/14 9:57:10编辑过]

--  作者:大红袍
--  发布时间:2015/6/14 10:56:00
--  

 呃,避免循环很简单。

 

 a1 改成 aa11

 

 b1 改成 a1

 

 c1 改成 b1

 

 aa11 改成 c1