例如,如果要根据列1填充列2,可以使用如下 SQL 语句:
SELECT
列1,ROW_NUMBER() OVER (PARTITION BY 列1 ORDER BY 列1) 列2FROM 表A
其中,ROW_NUMBER()是一个窗口函数,它根据给定的分组条件(在本例中为列1),为每一行生成一个唯一的行号。
结果应该类似于下面这样:
列1 列2
aa1
aa1
bb1
cc1
注意,由于没有给定排序条件,因此行号的生成顺序是不确定的。如果要按照列1的值的字母顺序为每一行生成行号,可以将上面的语句更改为:
SELECT
列1,ROW_NUMBER() OVER (PARTITION BY 列1 ORDER BY 列1) 列2FROM 表AORDER BY 列1
结果应该类似于下面这样:
列1 列2
aa1
aa1
bb2
cc3
希望这些信息能对你有所帮助。
第一个办法:用ROW_NUMBER() OVER(ORDER BY 你原来排序的方式 )第二个方法:增加一同值的列,用来order by,例如:
select row_number()over(order by orderid),t1.* from (select 1 as orderid,t.* from 表 t)t1
第三个办法:使用Identity+临时表,例如:
select Identity(int,1,1),t.* Into #temptable from 表 t
select * from #temptable
奔驰兄,那个isnumberic似乎在oracle 10g中不能用....奔驰兄,我在你答案基础上修改了下,你有时间指正一下:
测试用数据:
sql@kokooa>select * from test020
NAME TEL
-------------------- -------------
jim aaaaa
kate aaaaa
tom 12344
判断是否为数字:返回为null的为数字,为数字的则是字符串
sql@kokooa>select lengthb(ltrim(tel,'0123456789')) from test020
LENGTHB(LTRIM(TEL,'0123456789'))
--------------------------------
5
5
由此可见,第一,二行为字符串,第三行是null 则为数字。
将数字转换成汉字:
sql@kokooa>select case when lengthb(ltrim(tel,'0123456789')) is null then '汉字' else tel end from test020
CASEWHENLENGT
-------------
aaaaa
aaaaa
汉字
OK了。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)